diff --git a/asset-manifest.json b/asset-manifest.json index 7283b43..fc10fae 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,17 +1,17 @@ { "files": { - "main.css": "/mapfest_mapmaking_challenge_2024/static/css/main.9e33ded7.css", - "main.js": "/mapfest_mapmaking_challenge_2024/static/js/main.4198a538.js", + "main.css": "/mapfest_mapmaking_challenge_2024/static/css/main.0656efaa.css", + "main.js": "/mapfest_mapmaking_challenge_2024/static/js/main.51966397.js", "static/js/453.d19fc75a.chunk.js": "/mapfest_mapmaking_challenge_2024/static/js/453.d19fc75a.chunk.js", "static/js/879.f1135a6d.chunk.js": "/mapfest_mapmaking_challenge_2024/static/js/879.f1135a6d.chunk.js", "index.html": "/mapfest_mapmaking_challenge_2024/index.html", - "main.9e33ded7.css.map": "/mapfest_mapmaking_challenge_2024/static/css/main.9e33ded7.css.map", - "main.4198a538.js.map": "/mapfest_mapmaking_challenge_2024/static/js/main.4198a538.js.map", + "main.0656efaa.css.map": "/mapfest_mapmaking_challenge_2024/static/css/main.0656efaa.css.map", + "main.51966397.js.map": "/mapfest_mapmaking_challenge_2024/static/js/main.51966397.js.map", "453.d19fc75a.chunk.js.map": "/mapfest_mapmaking_challenge_2024/static/js/453.d19fc75a.chunk.js.map", "879.f1135a6d.chunk.js.map": "/mapfest_mapmaking_challenge_2024/static/js/879.f1135a6d.chunk.js.map" }, "entrypoints": [ - "static/css/main.9e33ded7.css", - "static/js/main.4198a538.js" + "static/css/main.0656efaa.css", + "static/js/main.51966397.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 353f997..1f2283a 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -React App
\ No newline at end of file +React App
\ No newline at end of file diff --git a/manifest.json b/manifest.json index 52b6bb1..fa99de7 100644 --- a/manifest.json +++ b/manifest.json @@ -16,4 +16,4 @@ "theme_color": "#ffffff", "background_color": "#ffffff", "display": "standalone" -} \ No newline at end of file +} diff --git a/static/css/main.9e33ded7.css b/static/css/main.0656efaa.css similarity index 90% rename from static/css/main.9e33ded7.css rename to static/css/main.0656efaa.css index 4535b7a..c3a17b9 100644 --- a/static/css/main.9e33ded7.css +++ b/static/css/main.0656efaa.css @@ -1,5 +1,5 @@ .mapboxgl-map{-webkit-tap-highlight-color:rgb(0 0 0/0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative}.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;-moz-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-left,.mapboxgl-ctrl-bottom-right,.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-right{right:0;top:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{bottom:0;right:0}.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-right .mapboxgl-ctrl{float:right;margin:10px 10px 0 0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{float:left;margin:0 0 10px 10px}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{float:right;margin:0 10px 10px 0}.mapboxgl-ctrl-group{background:#fff;border-radius:4px}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{background-color:transparent;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:transparent}.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:rgb(0 0 0/5%)}.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' 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' 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' 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")}}.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 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 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 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 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' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 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 cx='10' cy='10' r='2'/%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='%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 cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%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 cx='10' cy='10' r='2'/%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 cx='10' cy='10' r='2'/%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%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%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 cx='10' cy='10' r='2'/%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 cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%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 cx='10' cy='10' r='2'/%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 cx='10' cy='10' r='2'/%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%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%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'%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 cx='10' cy='10' r='2'/%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 cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}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='a' 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 0 1 3.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='b' 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 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.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 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .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 0 1-.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='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg opacity='.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cg opacity='.9' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%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:transparent;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='a' 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 0 1 3.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='b' 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 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.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 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .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 0 1-.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='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cg fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%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='a' 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 0 1 3.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='b' 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 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.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 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .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 0 1-.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='c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/mask%3E%3Cg stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23c)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23b' mask='url(%23c)'/%3E%3C/g%3E%3Cuse xlink:href='%23a'/%3E%3Cuse xlink:href='%23b'/%3E%3C/svg%3E")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{background-color:#fff;border-radius:12px;box-sizing:content-box;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-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:hsla(0,0%,100%,.5);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-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:rgb(0 0 0/5%)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;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}}@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:rgba(0,0,0,.75);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:hsla(0,0%,100%,.75);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 transparent;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:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.mapboxgl-popup-close-button:hover{background-color:rgb(0 0 0/5%)}.mapboxgl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);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;-moz-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 rgba(0,0,0,.35);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 transparent;transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid transparent;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:rgba(0,0,0,.7);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} /* ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com -*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.right-2{right:.5rem}.top-4{top:1rem}.z-10{z-index:10}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.ms-2{margin-inline-start:.5rem}.mt-1{margin-top:.25rem}.flex{display:flex}.inline-flex{display:inline-flex}.h-4{height:1rem}.h-screen{height:100vh}.max-h-60{max-height:15rem}.w-4{width:1rem}.w-full{width:100%}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.items-center{align-items:center}.justify-start{justify-content:flex-start}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.fill-current{fill:currentColor}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}body,html{height:100%;margin:0}#app{display:flex;flex-direction:column;height:100%}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus,.focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.focus\:ring-gray-100:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}@media (min-width:480px){.xs\:w-1\/2{width:50%}}@media (min-width:640px){.sm\:w-1\/2{width:50%}}@media (min-width:768px){.md\:w-1\/4{width:25%}}@media (min-width:1024px){.lg\:w-1\/5{width:20%}}@media (prefers-color-scheme:dark){.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:ring-offset-gray-800{--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:focus\:ring-blue-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.dark\:focus\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}} -/*# sourceMappingURL=main.9e33ded7.css.map*/ \ No newline at end of file +*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.right-2{right:.5rem}.top-4{top:1rem}.z-10{z-index:10}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.ms-2{margin-inline-start:.5rem}.mt-1{margin-top:.25rem}.flex{display:flex}.inline-flex{display:inline-flex}.h-4{height:1rem}.h-screen{height:100vh}.max-h-60{max-height:15rem}.w-4{width:1rem}.w-full{width:100%}.w-screen{width:100vw}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-between{justify-content:space-between}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.fill-current{fill:currentColor}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}body,html{height:100%;margin:0}#app{display:flex;flex-direction:column;height:100%}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus,.focus\:ring-4:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.focus\:ring-gray-100:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}@media (min-width:480px){.xs\:w-1\/2{width:50%}}@media (min-width:640px){.sm\:w-1\/2{width:50%}}@media (min-width:768px){.md\:w-1\/4{width:25%}}@media (min-width:1024px){.lg\:w-1\/5{width:20%}}@media (prefers-color-scheme:dark){.dark\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:ring-offset-gray-800{--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:focus\:ring-blue-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity))}.dark\:focus\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity))}} +/*# sourceMappingURL=main.0656efaa.css.map*/ \ No newline at end of file diff --git a/static/css/main.0656efaa.css.map b/static/css/main.0656efaa.css.map new file mode 100644 index 0000000..fcfdb57 --- /dev/null +++ b/static/css/main.0656efaa.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.0656efaa.css","mappings":"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","sources":["../node_modules/mapbox-gl/dist/mapbox-gl.css","assets/css/index.css"],"sourcesContent":[".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-left,.mapboxgl-ctrl-bottom-right,.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-right{right:0;top:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{bottom:0;right:0}.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-right .mapboxgl-ctrl{float:right;margin:10px 10px 0 0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{float:left;margin:0 0 10px 10px}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{float:right;margin:0 10px 10px 0}.mapboxgl-ctrl-group{background:#fff;border-radius:4px}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{background-color:transparent;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:transparent}.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:rgb(0 0 0/5%)}.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-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(0deg)}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:transparent;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:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{background-color:#fff;border-radius:12px;box-sizing:content-box;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-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:hsla(0,0%,100%,.5);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-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:rgb(0 0 0/5%)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;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}}@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:rgba(0,0,0,.75);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:hsla(0,0%,100%,.75);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 transparent;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:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.mapboxgl-popup-close-button:hover{background-color:rgb(0 0 0/5%)}.mapboxgl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);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;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 rgba(0,0,0,.35);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 transparent;transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid transparent;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:rgba(0,0,0,.7);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}","@tailwind base;\n@tailwind components;\n@tailwind utilities;\nhtml, body {\n height: 100%;\n margin: 0;\n}\n#app {\n display: flex;\n flex-direction: column;\n height: 100%;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/css/main.9e33ded7.css.map b/static/css/main.9e33ded7.css.map deleted file mode 100644 index 851dad7..0000000 --- a/static/css/main.9e33ded7.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/main.9e33ded7.css","mappings":"AAAA,cAAyG,wCAAuC,CAAlI,wDAAwD,CAAC,eAAe,CAAC,iBAA0D,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,kCAAkC,WAAW,CAAC,UAAU,CAAC,iBAAiB,uBAAuB,CAAC,kGAAkG,WAAW,CAAC,wBAAwB,CAAC,qBAAe,CAAf,gBAAgB,CAAC,uEAAuE,cAAc,CAAC,gHAAgH,eAAe,CAAC,6HAA6H,wBAAwB,CAAC,uHAAuH,uBAAuB,CAAC,6KAA6K,iBAAiB,CAAC,wGAAwG,mBAAmB,CAAC,iBAAiB,CAAC,SAAS,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,CAAC,4BAA4B,QAAQ,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,uCAAuC,UAAU,CAAC,oBAAoB,CAAC,wCAAwC,WAAW,CAAC,oBAAoB,CAAC,0CAA0C,UAAU,CAAC,oBAAoB,CAAC,2CAA2C,WAAW,CAAC,oBAAoB,CAAC,qBAAqB,eAAe,CAAC,iBAAiB,CAAC,iCAAiC,mCAAmC,CAAC,kCAAkC,iCAAiC,+BAA+B,CAAC,CAAC,4BAA4B,4BAA4B,CAAC,QAAQ,CAAC,qBAAqB,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,mCAAmC,yBAAyB,CAAC,0CAA0C,uBAAuB,CAAC,2BAA2B,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,oBAAoB,4BAA4B,CAAC,mCAAmC,+BAA+B,CAAC,CAAC,qEAAqE,8BAA8B,CAAC,+BAA+B,kBAAkB,CAAC,mDAAmD,WAAW,CAAC,wCAAwC,yBAAyB,CAAC,uCAAuC,yBAAyB,CAAC,uCAAuC,qBAAqB,CAAC,2CAA2C,8BAA8B,CAAC,gDAAgD,8BAA8B,CAAC,sDAAsD,eAAe,CAAC,iEAAiE,sPAAkrB,iEAAiE,wVAAmjC,oGAA0V,sPAAmgC,iEAAmE,wVAA68C,4CAA+D,iEAA2b,wOAAyoB,iEAA0C,0UAAk4C,ufAAwuD,gEAA2G,2aAAgxC,mCAAge,qfAAwuD,yfAAuyD,4CAAqB,mEAA2oG,oaAA0/M,gEAAyE,2aAA2b,kEAAgF,uOAAge,mGAAoH,uOAAkQ,4GAA0F,yNAA4S,oEAA6C,sZAAm9B,4EAA8E,ucAAghB,kGAAmF,yZAA+gB,CAAqB,uGAAgG,yZAAqgB,sGAAiG,sXAAmgB,4GAAkG,sXAAugB,mGAAsF,+IAAoM,sZAA+gB,CAAC,2EAAqD,ucAAghB,kGAAmH,yZAA6d;ACAh2lC;;CAAc,CAAd,uCAAc,CAAd,qBAAc,CAAd,8BAAc,CAAd,wCAAc,CAAd,4BAAc,CAAd,uCAAc,CAAd,gHAAc,CAAd,8BAAc,CAAd,eAAc,CAAd,eAAc,CAAd,aAAc,CAAd,UAAc,CAAd,wBAAc,CAAd,QAAc,CAAd,uBAAc,CAAd,aAAc,CAAd,QAAc,CAAd,4DAAc,CAAd,gCAAc,CAAd,mCAAc,CAAd,mBAAc,CAAd,eAAc,CAAd,uBAAc,CAAd,2BAAc,CAAd,8CAAc,CAAd,mGAAc,CAAd,aAAc,CAAd,8BAAc,CAAd,mBAAc,CAAd,qBAAc,CAAd,aAAc,CAAd,iBAAc,CAAd,uBAAc,CAAd,iBAAc,CAAd,aAAc,CAAd,8BAAc,CAAd,oBAAc,CAAd,aAAc,CAAd,mEAAc,CAAd,aAAc,CAAd,mBAAc,CAAd,cAAc,CAAd,+BAAc,CAAd,mBAAc,CAAd,sBAAc,CAAd,mBAAc,CAAd,QAAc,CAAd,SAAc,CAAd,iCAAc,CAAd,gHAAc,CAAd,4BAAc,CAAd,qBAAc,CAAd,4BAAc,CAAd,gCAAc,CAAd,gCAAc,CAAd,mEAAc,CAAd,0CAAc,CAAd,mBAAc,CAAd,mDAAc,CAAd,sDAAc,CAAd,YAAc,CAAd,yBAAc,CAAd,2DAAc,CAAd,iBAAc,CAAd,yBAAc,CAAd,0BAAc,CAAd,QAAc,CAAd,SAAc,CAAd,gBAAc,CAAd,wBAAc,CAAd,gEAAc,CAAd,SAAc,CAAd,sDAAc,CAAd,SAAc,CAAd,mCAAc,CAAd,wBAAc,CAAd,4DAAc,CAAd,qBAAc,CAAd,qBAAc,CAAd,cAAc,CAAd,qBAAc,CAAd,wCAAc,CAAd,uBAAc,CAAd,kBAAc,CAAd,kBAAc,CAAd,aAAc,CAAd,aAAc,CAAd,aAAc,CAAd,cAAc,CAAd,cAAc,CAAd,YAAc,CAAd,YAAc,CAAd,iBAAc,CAAd,qCAAc,CAAd,6BAAc,CAAd,4BAAc,CAAd,2BAAc,CAAd,cAAc,CAAd,mBAAc,CAAd,qBAAc,CAAd,sBAAc,CAAd,uBAAc,CAAd,iBAAc,CAAd,0BAAc,CAAd,2BAAc,CAAd,mCAAc,CAAd,iCAAc,CAAd,0BAAc,CAAd,qBAAc,CAAd,6BAAc,CAAd,WAAc,CAAd,iBAAc,CAAd,eAAc,CAAd,gBAAc,CAAd,iBAAc,CAAd,aAAc,CAAd,eAAc,CAAd,YAAc,CAAd,kBAAc,CAAd,oBAAc,CAAd,0BAAc,CAAd,wBAAc,CAAd,yBAAc,CAAd,0BAAc,CAAd,sBAAc,CAAd,uBAAc,CAAd,wBAAc,CAAd,qBAAc,CAAd,mBAAc,CAAd,qBAAc,CAAd,oBAAc,CAAd,oBAAc,CAAd,kCAAc,CAAd,uBAAc,CAAd,kBAAc,CAAd,kBAAc,CAAd,aAAc,CAAd,aAAc,CAAd,aAAc,CAAd,cAAc,CAAd,cAAc,CAAd,YAAc,CAAd,YAAc,CAAd,iBAAc,CAAd,qCAAc,CAAd,6BAAc,CAAd,4BAAc,CAAd,2BAAc,CAAd,cAAc,CAAd,mBAAc,CAAd,qBAAc,CAAd,sBAAc,CAAd,uBAAc,CAAd,iBAAc,CAAd,0BAAc,CAAd,2BAAc,CAAd,mCAAc,CAAd,iCAAc,CAAd,0BAAc,CAAd,qBAAc,CAAd,6BAAc,CAAd,WAAc,CAAd,iBAAc,CAAd,eAAc,CAAd,gBAAc,CAAd,iBAAc,CAAd,aAAc,CAAd,eAAc,CAAd,YAAc,CAAd,kBAAc,CAAd,oBAAc,CAAd,0BAAc,CAAd,wBAAc,CAAd,yBAAc,CAAd,0BAAc,CAAd,sBAAc,CAAd,uBAAc,CAAd,wBAAc,CAAd,qBAAc,CAAd,mBAAc,CAAd,qBAAc,CAAd,oBAAc,CAAd,oBAAc,CAEd,2BAAmB,CAAnB,2BAAmB,CAAnB,2BAAmB,CAAnB,qBAAmB,CAAnB,oBAAmB,CAAnB,eAAmB,CAAnB,gBAAmB,CAAnB,wBAAmB,CAAnB,mBAAmB,CAAnB,yBAAmB,CAAnB,iBAAmB,CAAnB,yBAAmB,CAAnB,wBAAmB,CAAnB,uBAAmB,CAAnB,yBAAmB,CAAnB,yBAAmB,CAAnB,+BAAmB,CAAnB,uBAAmB,CAAnB,kBAAmB,CAAnB,gCAAmB,CAAnB,gBAAmB,CAAnB,sBAAmB,CAAnB,0BAAmB,CAAnB,eAAmB,CAAnB,kBAAmB,CAAnB,qBAAmB,CAAnB,wMAAmB,CAAnB,8BAAmB,CAAnB,gCAAmB,CAAnB,yCAAmB,CAAnB,+DAAmB,CAAnB,4GAAmB,CAAnB,gCAAmB,CAAnB,6BAAmB,CAAnB,+BAAmB,CAAnB,wBAAmB,CAAnB,sCAAmB,CAAnB,sDAAmB,CAAnB,sCAAmB,CAAnB,sDAAmB,CAAnB,8BAAmB,CAAnB,sDAAmB,CAAnB,8BAAmB,CAAnB,sDAAmB,CAAnB,2BAAmB,CAAnB,sDAAmB,CAAnB,+BAAmB,CAAnB,kBAAmB,CAAnB,wBAAmB,CAAnB,mBAAmB,CAAnB,4CAAmB,CAAnB,0BAAmB,CAAnB,8BAAmB,CAAnB,4BAAmB,CAAnB,0BAAmB,CAAnB,mBAAmB,CAAnB,0BAAmB,CAAnB,mBAAmB,CAAnB,0BAAmB,CAAnB,4BAAmB,CAAnB,4BAAmB,CAAnB,kCAAmB,CAAnB,2CAAmB,CAAnB,kCAAmB,CAAnB,0CAAmB,CAAnB,kCAAmB,CAAnB,0CAAmB,CAAnB,+BAAmB,CAAnB,6CAAmB,CAAnB,wLAAmB,CACnB,UACE,WAAY,CACZ,QACF,CACA,KACE,YAAa,CACb,qBAAsB,CACtB,WACF,CAXA,2CAWC,CAXD,sDAWC,CAXD,2CAWC,CAXD,sDAWC,CAXD,wDAWC,CAXD,kBAWC,CAXD,+HAWC,CAXD,wGAWC,CAXD,iHAWC,CAXD,wFAWC,CAXD,+HAWC,CAXD,wGAWC,CAXD,+CAWC,CAXD,sDAWC,CAXD,+CAWC,CAXD,uDAWC,CAXD,8CAWC,EAXD,8CAWC,EAXD,8CAWC,EAXD,+CAWC,EAXD,+EAWC,CAXD,mDAWC,CAXD,4CAWC,CAXD,mDAWC,CAXD,oCAWC,CAXD,mDAWC,CAXD,oCAWC,CAXD,mDAWC,CAXD,qCAWC,CAXD,mDAWC,CAXD,wCAWC,CAXD,6CAWC,CAXD,qCAWC,CAXD,6CAWC,CAXD,0DAWC,CAXD,iDAWC,CAXD,mDAWC,CAXD,qDAWC,CAXD,qDAWC,CAXD,qDAWC,CAXD,oDAWC","sources":["../node_modules/mapbox-gl/dist/mapbox-gl.css","assets/css/index.css"],"sourcesContent":[".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-left,.mapboxgl-ctrl-bottom-right,.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-right{right:0;top:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{bottom:0;right:0}.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-right .mapboxgl-ctrl{float:right;margin:10px 10px 0 0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{float:left;margin:0 0 10px 10px}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{float:right;margin:0 10px 10px 0}.mapboxgl-ctrl-group{background:#fff;border-radius:4px}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{background-color:transparent;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:transparent}.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:rgb(0 0 0/5%)}.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-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(0deg)}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:transparent;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:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{background-color:#fff;border-radius:12px;box-sizing:content-box;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-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:hsla(0,0%,100%,.5);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-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:rgb(0 0 0/5%)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;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}}@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:rgba(0,0,0,.75);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:hsla(0,0%,100%,.75);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 transparent;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:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.mapboxgl-popup-close-button:hover{background-color:rgb(0 0 0/5%)}.mapboxgl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);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;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 rgba(0,0,0,.35);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 transparent;transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid transparent;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:rgba(0,0,0,.7);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}","@tailwind base;\n@tailwind components;\n@tailwind utilities;\nhtml, body {\n height: 100%;\n margin: 0;\n}\n#app {\n display: flex;\n flex-direction: column;\n height: 100%;\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.4198a538.js.map b/static/js/main.4198a538.js.map deleted file mode 100644 index 0ea9d8e..0000000 --- a/static/js/main.4198a538.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/main.4198a538.js","mappings":"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","sources":["../node_modules/hammerjs/hammer.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../webpack/bootstrap","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","reportWebVitals.js","../node_modules/react-map-gl/src/components/use-map.tsx","../node_modules/react-map-gl/src/utils/deep-equal.ts","../node_modules/react-map-gl/src/utils/transform.ts","../node_modules/react-map-gl/src/utils/style-utils.ts","../node_modules/react-map-gl/src/mapbox/mapbox.ts","../node_modules/react-map-gl/src/mapbox/create-ref.ts","../node_modules/react-map-gl/src/utils/use-isomorphic-layout-effect.ts","../node_modules/react-map-gl/src/utils/set-globals.ts","../node_modules/react-map-gl/src/components/map.tsx","../node_modules/react-map-gl/src/utils/apply-react-style.ts","../node_modules/react-map-gl/src/components/marker.ts","../node_modules/react-map-gl/src/components/popup.ts","../node_modules/react-map-gl/src/components/use-control.ts","../node_modules/react-map-gl/src/components/attribution-control.ts","../node_modules/react-map-gl/src/components/fullscreen-control.tsx","../node_modules/react-map-gl/src/components/geolocate-control.ts","../node_modules/react-map-gl/src/components/navigation-control.ts","../node_modules/react-map-gl/src/components/scale-control.ts","../node_modules/react-map-gl/src/utils/assert.ts","../node_modules/react-map-gl/src/components/layer.ts","../node_modules/react-map-gl/src/components/source.ts","../node_modules/react-map-gl/src/exports-mapbox.ts","assets/flags/lao.jsx","assets/flags/vietnam.jsx","assets/flags/myanmar.jsx","assets/flags/nepal.jsx","assets/flags/afghanistan.jsx","assets/flags/pakistan.jsx","components/constants.jsx","../node_modules/@luma.gl/engine/dist/animation/timeline.js","../node_modules/@luma.gl/shadertools/dist/lib/utils/assert.js","../node_modules/@luma.gl/shadertools/dist/lib/filters/prop-types.js","../node_modules/@luma.gl/shadertools/dist/module-injectors.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/shader-injections.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-module/shader-module-instance.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/select-shaders.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/resolve-modules.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-transpiler/transpile-glsl-shader.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/shader-hooks.js","../node_modules/@luma.gl/shadertools/dist/lib/glsl-utils/get-shader-info.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/assemble-shaders.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembly/platform-defines.js","../node_modules/@luma.gl/shadertools/dist/lib/shader-assembler.js","../node_modules/@luma.gl/shadertools/dist/modules/math/fp32/fp32.js","../node_modules/@deck.gl/core/dist/shaderlib/misc/geometry.js","../node_modules/@probe.gl/env/dist/lib/is-electron.js","../node_modules/@probe.gl/env/dist/lib/is-browser.js","../node_modules/@probe.gl/env/dist/index.js","../node_modules/@probe.gl/log/dist/utils/local-storage.js","../node_modules/@probe.gl/log/dist/utils/color.js","../node_modules/@probe.gl/log/dist/utils/assert.js","../node_modules/@probe.gl/env/dist/lib/globals.js","../node_modules/@probe.gl/log/dist/utils/hi-res-timestamp.js","../node_modules/@probe.gl/log/dist/log.js","../node_modules/@probe.gl/log/dist/utils/autobind.js","../node_modules/@probe.gl/log/dist/utils/formatters.js","../node_modules/@deck.gl/core/dist/utils/log.js","../node_modules/@deck.gl/core/dist/lib/constants.js","../node_modules/@deck.gl/core/dist/shaderlib/project/project.glsl.js","../node_modules/@math.gl/core/dist/gl-matrix/common.js","../node_modules/@math.gl/core/dist/gl-matrix/vec4.js","../node_modules/@math.gl/core/dist/gl-matrix/mat4.js","../node_modules/@deck.gl/core/dist/utils/memoize.js","../node_modules/@deck.gl/core/dist/shaderlib/project/viewport-uniforms.js","../node_modules/@deck.gl/core/dist/shaderlib/project/project.js","../node_modules/@deck.gl/core/dist/shaderlib/index.js","../node_modules/@deck.gl/core/dist/lifecycle/constants.js","../node_modules/@deck.gl/core/dist/debug/index.js","../node_modules/@deck.gl/core/dist/utils/flatten.js","../node_modules/@probe.gl/stats/dist/utils/hi-res-timestamp.js","../node_modules/@probe.gl/stats/dist/lib/stat.js","../node_modules/@probe.gl/stats/dist/lib/stats.js","../node_modules/@loaders.gl/core/dist/javascript-utils/is-type.js","../node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/assert.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/normalize-loader.js","../node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/file-aliases.js","../node_modules/@loaders.gl/core/dist/lib/fetch/fetch-error.js","../node_modules/@loaders.gl/core/dist/lib/utils/mime-type-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/url-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/resource-utils.js","../node_modules/@loaders.gl/core/dist/lib/utils/response-utils.js","../node_modules/@loaders.gl/core/dist/lib/fetch/fetch-file.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/loggers.js","../node_modules/@loaders.gl/loader-utils/dist/lib/env-utils/globals.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/option-defaults.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/option-utils.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/get-fetch-function.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/globals.js","../node_modules/@loaders.gl/worker-utils/dist/lib/node/worker_threads-browser.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/assert.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-loadable-worker-url.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-utils/get-transfer-list.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-thread.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-job.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-pool.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-farm/worker-farm.js","../node_modules/@loaders.gl/worker-utils/dist/lib/env-utils/version.js","../node_modules/@loaders.gl/loader-utils/dist/lib/worker-loader-utils/parse-with-worker.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/get-worker-url.js","../node_modules/@loaders.gl/loader-utils/dist/lib/option-utils/merge-loader-options.js","../node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/array-buffer-utils.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-string-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-array-buffer-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-blob-iterator.js","../node_modules/@loaders.gl/loader-utils/dist/lib/binary-utils/memory-conversion-utils.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-stream-iterator.js","../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-iterator.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/get-data.js","../node_modules/@loaders.gl/loader-utils/dist/lib/iterators/async-iteration.js","../node_modules/@loaders.gl/loader-utils/dist/lib/path-utils/path.js","../node_modules/@loaders.gl/core/dist/lib/loader-utils/loader-context.js","../node_modules/@loaders.gl/core/dist/lib/utils/log.js","../node_modules/@loaders.gl/core/dist/lib/api/register-loaders.js","../node_modules/@loaders.gl/core/dist/lib/api/select-loader.js","../node_modules/@loaders.gl/core/dist/lib/api/parse.js","../node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/validate-worker-version.js","../node_modules/@loaders.gl/core/dist/lib/api/load.js","../node_modules/@deck.gl/core/dist/lib/resource/resource.js","../node_modules/@deck.gl/core/dist/lib/resource/resource-manager.js","../node_modules/@deck.gl/core/dist/utils/typed-array-manager.js","../node_modules/@math.gl/core/dist/lib/common.js","../node_modules/@math.gl/core/dist/classes/base/math-array.js","../node_modules/@math.gl/core/dist/lib/validators.js","../node_modules/@math.gl/core/dist/lib/assert.js","../node_modules/@math.gl/core/dist/classes/base/vector.js","../node_modules/@math.gl/core/dist/gl-matrix/vec3.js","../node_modules/@math.gl/core/dist/lib/gl-matrix-extras.js","../node_modules/@math.gl/core/dist/classes/vector3.js","../node_modules/@deck.gl/core/dist/utils/math-utils.js","../node_modules/@math.gl/core/dist/classes/base/matrix.js","../node_modules/@math.gl/core/dist/gl-matrix/vec2.js","../node_modules/@math.gl/core/dist/classes/matrix4.js","../node_modules/@math.gl/web-mercator/dist/math-utils.js","../node_modules/@math.gl/web-mercator/dist/assert.js","../node_modules/@math.gl/web-mercator/dist/web-mercator-utils.js","../node_modules/@math.gl/web-mercator/dist/fit-bounds.js","../node_modules/@math.gl/web-mercator/dist/get-bounds.js","../node_modules/@deck.gl/core/dist/viewports/viewport.js","../node_modules/@deck.gl/core/dist/lib/layer-manager.js","../node_modules/@deck.gl/core/dist/utils/deep-equal.js","../node_modules/@deck.gl/core/dist/lib/view-manager.js","../node_modules/@deck.gl/core/dist/utils/positions.js","../node_modules/@deck.gl/core/dist/views/view.js","../node_modules/@deck.gl/core/dist/viewports/web-mercator-viewport.js","../node_modules/@deck.gl/core/dist/transitions/transition.js","../node_modules/@deck.gl/core/dist/controllers/transition-manager.js","../node_modules/@deck.gl/core/dist/utils/assert.js","../node_modules/@deck.gl/core/dist/transitions/transition-interpolator.js","../node_modules/@deck.gl/core/dist/transitions/linear-interpolator.js","../node_modules/@deck.gl/core/dist/controllers/controller.js","../node_modules/@deck.gl/core/dist/controllers/view-state.js","../node_modules/@deck.gl/core/dist/controllers/map-controller.js","../node_modules/@math.gl/web-mercator/dist/normalize-viewport-props.js","../node_modules/@deck.gl/core/dist/views/map-view.js","../node_modules/@deck.gl/core/dist/effects/lighting/ambient-light.js","../node_modules/@deck.gl/core/dist/effects/lighting/directional-light.js","../node_modules/@deck.gl/core/dist/passes/pass.js","../node_modules/@deck.gl/core/dist/passes/layers-pass.js","../node_modules/@deck.gl/core/dist/passes/shadow-pass.js","../node_modules/@deck.gl/core/dist/shaderlib/shadow/shadow.js","../node_modules/@deck.gl/core/dist/effects/lighting/lighting-effect.js","../node_modules/@deck.gl/core/dist/lib/effect-manager.js","../node_modules/@deck.gl/core/dist/passes/draw-layers-pass.js","../node_modules/@deck.gl/core/dist/passes/pick-layers-pass.js","../node_modules/@deck.gl/core/dist/lib/deck-renderer.js","../node_modules/@deck.gl/core/dist/lib/picking/query-object.js","../node_modules/@deck.gl/core/dist/lib/picking/pick-info.js","../node_modules/@deck.gl/core/dist/lib/deck-picker.js","../node_modules/@deck.gl/core/dist/lib/widget-manager.js","../node_modules/@deck.gl/core/dist/lib/tooltip.js","../node_modules/@loaders.gl/images/dist/lib/utils/version.js","../node_modules/@loaders.gl/images/dist/lib/category-api/image-type.js","../node_modules/@loaders.gl/images/dist/lib/category-api/parsed-image-api.js","../node_modules/@loaders.gl/images/dist/lib/parsers/svg-utils.js","../node_modules/@loaders.gl/images/dist/lib/parsers/parse-to-image.js","../node_modules/@loaders.gl/images/dist/lib/parsers/parse-to-image-bitmap.js","../node_modules/@loaders.gl/images/dist/lib/category-api/parse-isobmff-binary.js","../node_modules/@loaders.gl/images/dist/lib/category-api/binary-image-api.js","../node_modules/@loaders.gl/images/dist/image-loader.js","../node_modules/@loaders.gl/images/dist/lib/parsers/parse-image.js","../node_modules/@loaders.gl/images/dist/lib/parsers/parse-to-node-image.js","../node_modules/@deck.gl/core/dist/utils/json-loader.js","../node_modules/@deck.gl/core/dist/lib/init.js","../node_modules/@luma.gl/core/dist/utils/log.js","../node_modules/@luma.gl/core/dist/utils/stats-manager.js","../node_modules/@luma.gl/core/dist/init.js","../node_modules/@luma.gl/core/dist/utils/utils.js","../node_modules/@luma.gl/core/dist/adapter/resources/resource.js","../node_modules/@luma.gl/core/dist/adapter/resources/buffer.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/decode-data-type.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/decode-texture-format.js","../node_modules/@luma.gl/core/dist/adapter/device.js","../node_modules/@luma.gl/core/dist/utils/assert.js","../node_modules/@luma.gl/core/dist/lib/luma.js","../node_modules/@luma.gl/core/dist/adapter/canvas-context.js","../node_modules/@luma.gl/webgl/dist/context/parameters/webgl-parameter-tables.js","../node_modules/@luma.gl/webgl/dist/context/parameters/unified-parameter-api.js","../node_modules/@luma.gl/webgl/dist/context/state-tracker/deep-array-equal.js","../node_modules/@luma.gl/webgl/dist/context/state-tracker/track-context-state.js","../node_modules/@luma.gl/webgl/dist/context/helpers/create-browser-context.js","../node_modules/@luma.gl/webgl/dist/context/helpers/webgl-extensions.js","../node_modules/@luma.gl/webgl/dist/adapter/device-helpers/webgl-device-info.js","../node_modules/@luma.gl/webgl/dist/adapter/converters/vertex-formats.js","../node_modules/@luma.gl/webgl/dist/adapter/converters/texture-formats.js","../node_modules/@luma.gl/webgl/dist/adapter/device-helpers/webgl-device-features.js","../node_modules/@luma.gl/webgl/dist/adapter/device-helpers/webgl-device-limits.js","../node_modules/@luma.gl/core/dist/adapter/resources/texture.js","../node_modules/@luma.gl/core/dist/adapter/resources/framebuffer.js","../node_modules/@luma.gl/core/dist/utils/load-file.js","../node_modules/@luma.gl/webgl/dist/context/state-tracker/with-parameters.js","../node_modules/@luma.gl/webgl/dist/adapter/converters/device-parameters.js","../node_modules/@luma.gl/webgl/dist/adapter/converters/sampler-parameters.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-buffer.js","../node_modules/@luma.gl/core/dist/adapter/resources/sampler.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-sampler.js","../node_modules/@luma.gl/core/dist/adapter/resources/texture-view.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-texture-view.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-texture.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-framebuffer.js","../node_modules/@luma.gl/webgl/dist/adapter/webgl-canvas-context.js","../node_modules/@luma.gl/webgl/dist/context/debug/spector.js","../node_modules/@luma.gl/constants/dist/webgl-constants.js","../node_modules/@luma.gl/webgl/dist/context/debug/webgl-developer-tools.js","../node_modules/@luma.gl/core/dist/lib/compiler-log/format-compiler-log.js","../node_modules/@luma.gl/core/dist/lib/compiler-log/get-shader-info.js","../node_modules/@luma.gl/core/dist/adapter/resources/shader.js","../node_modules/@luma.gl/webgl/dist/adapter/helpers/parse-shader-compiler-log.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-shader.js","../node_modules/@luma.gl/core/dist/adapter/resources/render-pass.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-render-pass.js","../node_modules/@luma.gl/core/dist/adapter/resources/render-pipeline.js","../node_modules/@luma.gl/core/dist/utils/is-array.js","../node_modules/@luma.gl/core/dist/lib/uniforms/uniform.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/decode-attribute-type.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/decode-vertex-format.js","../node_modules/@luma.gl/core/dist/adapter/attribute-utils/get-attribute-from-layouts.js","../node_modules/@luma.gl/webgl/dist/classic/typed-array-utils.js","../node_modules/@luma.gl/webgl/dist/classic/accessor.js","../node_modules/@luma.gl/core/dist/utils/check-props.js","../node_modules/@luma.gl/webgl/dist/adapter/helpers/decode-webgl-types.js","../node_modules/@luma.gl/webgl/dist/adapter/helpers/get-shader-layout.js","../node_modules/@luma.gl/webgl/dist/adapter/helpers/set-uniform.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-render-pipeline.js","../node_modules/@luma.gl/webgl/dist/adapter/helpers/webgl-topology-utils.js","../node_modules/@luma.gl/core/dist/adapter/resources/command-encoder.js","../node_modules/@luma.gl/core/dist/adapter/resources/command-buffer.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-command-buffer.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-command-encoder.js","../node_modules/@luma.gl/core/dist/adapter/resources/vertex-array.js","../node_modules/@luma.gl/core/dist/utils/array-utils-flat.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-vertex-array.js","../node_modules/@probe.gl/env/dist/lib/get-browser.js","../node_modules/@luma.gl/core/dist/adapter/resources/transform-feedback.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-transform-feedback.js","../node_modules/@luma.gl/core/dist/adapter/resources/query-set.js","../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-query-set.js","../node_modules/@luma.gl/webgl/dist/classic/format-utils.js","../node_modules/@luma.gl/webgl/dist/classic/copy-and-blit.js","../node_modules/@luma.gl/webgl/dist/classic/clear.js","../node_modules/@luma.gl/webgl/dist/adapter/webgl-device.js","../node_modules/@luma.gl/engine/dist/animation-loop/animation-loop.js","../node_modules/@luma.gl/core/dist/utils/request-animation-frame.js","../node_modules/mjolnir.js/src/utils/hammer-overrides.ts","../node_modules/mjolnir.js/src/utils/hammer.browser.ts","../node_modules/mjolnir.js/src/inputs/input.ts","../node_modules/mjolnir.js/src/constants.ts","../node_modules/mjolnir.js/src/utils/globals.ts","../node_modules/mjolnir.js/src/inputs/wheel-input.ts","../node_modules/mjolnir.js/src/inputs/move-input.ts","../node_modules/mjolnir.js/src/inputs/key-input.ts","../node_modules/mjolnir.js/src/inputs/contextmenu-input.ts","../node_modules/mjolnir.js/src/utils/event-utils.ts","../node_modules/mjolnir.js/src/utils/event-registrar.ts","../node_modules/mjolnir.js/src/event-manager.ts","../node_modules/@deck.gl/core/dist/lib/deck.js","../node_modules/@deck.gl/react/dist/utils/use-isomorphic-layout-effect.js","../node_modules/@deck.gl/react/dist/utils/inherits-from.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/vertex-format-from-attribute.js","../node_modules/@deck.gl/core/dist/lib/attribute/gl-utils.js","../node_modules/@deck.gl/core/dist/lib/attribute/data-column.js","../node_modules/@deck.gl/core/dist/utils/iterable-utils.js","../node_modules/@deck.gl/core/dist/utils/range.js","../node_modules/@deck.gl/core/dist/lib/attribute/transition-settings.js","../node_modules/@deck.gl/core/dist/lib/attribute/attribute.js","../node_modules/@luma.gl/shadertools/dist/lib/glsl-utils/shader-utils.js","../node_modules/@luma.gl/core/dist/lib/uniforms/uniform-block.js","../node_modules/@luma.gl/core/dist/utils/array-equal.js","../node_modules/@luma.gl/core/dist/adapter/type-utils/decode-shader-types.js","../node_modules/@luma.gl/core/dist/lib/uniforms/uniform-buffer-layout.js","../node_modules/@luma.gl/core/dist/lib/uniforms/uniform-store.js","../node_modules/@luma.gl/core/dist/utils/deep-equal.js","../node_modules/@luma.gl/shadertools/dist/libs/wgsl-reflect/wgsl_reflect.module.js","../node_modules/@luma.gl/shadertools/dist/lib/wgsl/get-shader-layout-wgsl.js","../node_modules/@luma.gl/engine/dist/geometry/gpu-geometry.js","../node_modules/@luma.gl/engine/dist/shader-inputs.js","../node_modules/@luma.gl/core/dist/adapter/resources/compute-pipeline.js","../node_modules/@luma.gl/engine/dist/lib/pipeline-factory.js","../node_modules/@luma.gl/engine/dist/lib/shader-factory.js","../node_modules/@luma.gl/engine/dist/debug/debug-framebuffer.js","../node_modules/@luma.gl/engine/dist/model/model.js","../node_modules/@luma.gl/engine/dist/debug/debug-shader-layout.js","../node_modules/@luma.gl/engine/dist/transform/buffer-transform.js","../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-utils.js","../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.js","../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64.js","../node_modules/@deck.gl/core/dist/utils/array-utils.js","../node_modules/@deck.gl/core/dist/transitions/gpu-transition-utils.js","../node_modules/@deck.gl/core/dist/transitions/gpu-transition.js","../node_modules/@deck.gl/core/dist/transitions/gpu-interpolation-transition.js","../node_modules/@deck.gl/core/dist/transitions/gpu-spring-transition.js","../node_modules/@deck.gl/core/dist/lib/attribute/attribute-transition-manager.js","../node_modules/@deck.gl/core/dist/lib/attribute/attribute-manager.js","../node_modules/@deck.gl/core/dist/transitions/cpu-spring-transition.js","../node_modules/@deck.gl/core/dist/lib/uniform-transition-manager.js","../node_modules/@deck.gl/core/dist/transitions/cpu-interpolation-transition.js","../node_modules/@deck.gl/core/dist/lifecycle/props.js","../node_modules/@deck.gl/core/dist/utils/count.js","../node_modules/@deck.gl/core/dist/utils/shader.js","../node_modules/@deck.gl/core/dist/shaderlib/project/project-functions.js","../node_modules/@deck.gl/core/dist/utils/texture.js","../node_modules/@deck.gl/core/dist/lifecycle/prop-types.js","../node_modules/@deck.gl/core/dist/lifecycle/create-props.js","../node_modules/@deck.gl/core/dist/lifecycle/component.js","../node_modules/@deck.gl/core/dist/lifecycle/component-state.js","../node_modules/@deck.gl/core/dist/lib/layer-state.js","../node_modules/@deck.gl/core/dist/lib/layer.js","../node_modules/@deck.gl/react/dist/utils/evaluate-children.js","../node_modules/@deck.gl/react/dist/utils/extract-jsx-layers.js","../node_modules/@deck.gl/react/dist/utils/extract-styles.js","../node_modules/@deck.gl/react/dist/deckgl.js","../node_modules/@deck.gl/react/dist/utils/position-children-under-views.js","../node_modules/pako/dist/pako.esm.mjs","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","utils/utils.js","../node_modules/react-icons/lib/iconsManifest.mjs","../node_modules/react-icons/lib/iconContext.mjs","../node_modules/react-icons/lib/iconBase.mjs","../node_modules/react-icons/fi/index.mjs","components/select.jsx","components/checkBox.jsx","components/Sidebar.jsx","components/popUp.jsx","utils/mapStyle.js","components/dataLayer.jsx","pages/App.jsx","index.js"],"sourcesContent":["/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"453\":\"d19fc75a\",\"879\":\"f1135a6d\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"app:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/mapfest_mapmaking_challenge_2024/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkapp\"] = self[\"webpackChunkapp\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import * as React from 'react';\nimport {useState, useCallback, useMemo, useContext} from 'react';\n\nimport {MapRef} from '../mapbox/create-ref';\nimport {MapContext} from './map';\nimport {MapInstance} from '../types';\n\ntype MountedMapsContextValue = {\n maps: {[id: string]: MapRef};\n onMapMount: (map: MapRef, id: string) => void;\n onMapUnmount: (id: string) => void;\n};\n\nexport const MountedMapsContext = React.createContext(null);\n\nexport const MapProvider: React.FC<{children?: React.ReactNode}> = props => {\n const [maps, setMaps] = useState<{[id: string]: MapRef}>({});\n\n const onMapMount = useCallback((map: MapRef, id: string = 'default') => {\n setMaps(currMaps => {\n if (id === 'current') {\n throw new Error(\"'current' cannot be used as map id\");\n }\n if (currMaps[id]) {\n throw new Error(`Multiple maps with the same id: ${id}`);\n }\n return {...currMaps, [id]: map};\n });\n }, []);\n\n const onMapUnmount = useCallback((id: string = 'default') => {\n setMaps(currMaps => {\n if (currMaps[id]) {\n const nextMaps = {...currMaps};\n delete nextMaps[id];\n return nextMaps;\n }\n return currMaps;\n });\n }, []);\n\n return (\n \n {props.children}\n \n );\n};\n\nexport type MapCollection = {\n [id: string]: MapRef | undefined;\n current?: MapRef;\n};\n\nexport function useMap(): MapCollection {\n const maps = useContext(MountedMapsContext)?.maps;\n const currentMap = useContext(MapContext);\n\n const mapsWithCurrent = useMemo(() => {\n return {...maps, current: currentMap?.map};\n }, [maps, currentMap]);\n\n return mapsWithCurrent as MapCollection;\n}\n","import type {PointLike} from '../types';\n\n/**\n * Compare two points\n * @param a\n * @param b\n * @returns true if the points are equal\n */\nexport function arePointsEqual(a?: PointLike, b?: PointLike): boolean {\n const ax = Array.isArray(a) ? a[0] : a ? a.x : 0;\n const ay = Array.isArray(a) ? a[1] : a ? a.y : 0;\n const bx = Array.isArray(b) ? b[0] : b ? b.x : 0;\n const by = Array.isArray(b) ? b[1] : b ? b.y : 0;\n return ax === bx && ay === by;\n}\n\n/* eslint-disable complexity */\n/**\n * Compare any two objects\n * @param a\n * @param b\n * @returns true if the objects are deep equal\n */\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n } else if (Array.isArray(b)) {\n return false;\n }\n if (typeof a === 'object' && typeof b === 'object') {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","import type {MapboxProps} from '../mapbox/mapbox';\nimport type {Transform, ViewState} from '../types';\nimport {deepEqual} from './deep-equal';\n\n/**\n * Make a copy of a transform\n * @param tr\n */\nexport function cloneTransform(tr: Transform): Transform {\n const newTransform = tr.clone();\n // Work around mapbox bug - this value is not assigned in clone(), only in resize()\n newTransform.pixelsToGLUnits = tr.pixelsToGLUnits;\n return newTransform;\n}\n\n/**\n * Copy projection from one transform to another. This only applies to mapbox-gl transforms\n * @param src the transform to copy projection settings from\n * @param dest to transform to copy projection settings to\n */\nexport function syncProjection(src: Transform, dest: Transform): void {\n if (!src.getProjection) {\n return;\n }\n const srcProjection = src.getProjection();\n const destProjection = dest.getProjection();\n\n if (!deepEqual(srcProjection, destProjection)) {\n dest.setProjection(srcProjection);\n }\n}\n\n/**\n * Capture a transform's current state\n * @param transform\n * @returns descriptor of the view state\n */\nexport function transformToViewState(tr: Transform): ViewState {\n return {\n longitude: tr.center.lng,\n latitude: tr.center.lat,\n zoom: tr.zoom,\n pitch: tr.pitch,\n bearing: tr.bearing,\n padding: tr.padding\n };\n}\n\n/* eslint-disable complexity */\n/**\n * Mutate a transform to match the given view state\n * @param transform\n * @param viewState\n * @returns true if the transform has changed\n */\nexport function applyViewStateToTransform(tr: Transform, props: MapboxProps): boolean {\n const v: Partial = props.viewState || props;\n let changed = false;\n\n if ('longitude' in v && 'latitude' in v) {\n const center = tr.center;\n // @ts-ignore\n tr.center = new center.constructor(v.longitude, v.latitude);\n changed = changed || center !== tr.center;\n }\n if ('zoom' in v) {\n const zoom = tr.zoom;\n tr.zoom = v.zoom;\n changed = changed || zoom !== tr.zoom;\n }\n if ('bearing' in v) {\n const bearing = tr.bearing;\n tr.bearing = v.bearing;\n changed = changed || bearing !== tr.bearing;\n }\n if ('pitch' in v) {\n const pitch = tr.pitch;\n tr.pitch = v.pitch;\n changed = changed || pitch !== tr.pitch;\n }\n if (v.padding && !tr.isPaddingEqual(v.padding)) {\n changed = true;\n tr.padding = v.padding;\n }\n return changed;\n}\n","import {ImmutableLike, MapStyle} from '../types';\n\nconst refProps = ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];\n\n// Prepare a map style object for diffing\n// If immutable - convert to plain object\n// Work around some issues in older styles that would fail Mapbox's diffing\nexport function normalizeStyle(\n style: string | MapStyle | ImmutableLike\n): string | MapStyle {\n if (!style) {\n return null;\n }\n if (typeof style === 'string') {\n return style;\n }\n if ('toJS' in style) {\n style = style.toJS();\n }\n if (!style.layers) {\n return style;\n }\n const layerIndex = {};\n\n for (const layer of style.layers) {\n layerIndex[layer.id] = layer;\n }\n\n const layers = style.layers.map(layer => {\n let normalizedLayer: typeof layer = null;\n\n if ('interactive' in layer) {\n normalizedLayer = Object.assign({}, layer);\n // Breaks style diffing :(\n // @ts-ignore legacy field not typed\n delete normalizedLayer.interactive;\n }\n\n // Style diffing doesn't work with refs so expand them out manually before diffing.\n // @ts-ignore legacy field not typed\n const layerRef = layerIndex[layer.ref];\n if (layerRef) {\n normalizedLayer = normalizedLayer || Object.assign({}, layer);\n // @ts-ignore\n delete normalizedLayer.ref;\n // https://github.com/mapbox/mapbox-gl-js/blob/master/src/style-spec/deref.js\n for (const propName of refProps) {\n if (propName in layerRef) {\n normalizedLayer[propName] = layerRef[propName];\n }\n }\n }\n\n return normalizedLayer || layer;\n });\n\n // Do not mutate the style object provided by the user\n return {...style, layers};\n}\n","import {\n transformToViewState,\n applyViewStateToTransform,\n cloneTransform,\n syncProjection\n} from '../utils/transform';\nimport {normalizeStyle} from '../utils/style-utils';\nimport {deepEqual} from '../utils/deep-equal';\n\nimport type {\n Transform,\n ViewState,\n ViewStateChangeEvent,\n Point,\n PointLike,\n PaddingOptions,\n MapStyle,\n ImmutableLike,\n LngLatBoundsLike,\n Callbacks,\n MapEvent,\n ErrorEvent,\n MapMouseEvent,\n MapGeoJSONFeature,\n MapInstance,\n MapInstanceInternal\n} from '../types';\n\nexport type MapboxProps<\n StyleT extends MapStyle = MapStyle,\n CallbacksT extends Callbacks = {}\n> = Partial &\n CallbacksT & {\n // Init options\n mapboxAccessToken?: string;\n\n /** Camera options used when constructing the Map instance */\n initialViewState?: Partial & {\n /** The initial bounds of the map. If bounds is specified, it overrides longitude, latitude and zoom options. */\n bounds?: LngLatBoundsLike;\n /** A fitBounds options object to use only when setting the bounds option. */\n fitBoundsOptions?: {\n offset?: PointLike;\n minZoom?: number;\n maxZoom?: number;\n padding?: number | PaddingOptions;\n };\n };\n\n /** If provided, render into an external WebGL context */\n gl?: WebGLRenderingContext;\n\n /** For external controller to override the camera state */\n viewState?: ViewState & {\n width: number;\n height: number;\n };\n\n // Styling\n\n /** Mapbox style */\n mapStyle?: string | StyleT | ImmutableLike;\n /** Enable diffing when the map style changes\n * @default true\n */\n styleDiffing?: boolean;\n /** The fog property of the style. Must conform to the Fog Style Specification .\n * If `undefined` is provided, removes the fog from the map. */\n fog?: StyleT['fog'];\n /** Light properties of the map. */\n light?: StyleT['light'];\n /** Terrain property of the style. Must conform to the Terrain Style Specification .\n * If `undefined` is provided, removes terrain from the map. */\n terrain?: StyleT['terrain'];\n\n /** Default layers to query on pointer events */\n interactiveLayerIds?: string[];\n /** CSS cursor */\n cursor?: string;\n };\n\nconst DEFAULT_STYLE = {version: 8, sources: {}, layers: []} as MapStyle;\n\nconst pointerEvents = {\n mousedown: 'onMouseDown',\n mouseup: 'onMouseUp',\n mouseover: 'onMouseOver',\n mousemove: 'onMouseMove',\n click: 'onClick',\n dblclick: 'onDblClick',\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n mouseout: 'onMouseOut',\n contextmenu: 'onContextMenu',\n touchstart: 'onTouchStart',\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchcancel: 'onTouchCancel'\n};\nconst cameraEvents = {\n movestart: 'onMoveStart',\n move: 'onMove',\n moveend: 'onMoveEnd',\n dragstart: 'onDragStart',\n drag: 'onDrag',\n dragend: 'onDragEnd',\n zoomstart: 'onZoomStart',\n zoom: 'onZoom',\n zoomend: 'onZoomEnd',\n rotatestart: 'onRotateStart',\n rotate: 'onRotate',\n rotateend: 'onRotateEnd',\n pitchstart: 'onPitchStart',\n pitch: 'onPitch',\n pitchend: 'onPitchEnd'\n};\nconst otherEvents = {\n wheel: 'onWheel',\n boxzoomstart: 'onBoxZoomStart',\n boxzoomend: 'onBoxZoomEnd',\n boxzoomcancel: 'onBoxZoomCancel',\n resize: 'onResize',\n load: 'onLoad',\n render: 'onRender',\n idle: 'onIdle',\n remove: 'onRemove',\n data: 'onData',\n styledata: 'onStyleData',\n sourcedata: 'onSourceData',\n error: 'onError'\n};\nconst settingNames = [\n 'minZoom',\n 'maxZoom',\n 'minPitch',\n 'maxPitch',\n 'maxBounds',\n 'projection',\n 'renderWorldCopies'\n];\nconst handlerNames = [\n 'scrollZoom',\n 'boxZoom',\n 'dragRotate',\n 'dragPan',\n 'keyboard',\n 'doubleClickZoom',\n 'touchZoomRotate',\n 'touchPitch'\n];\n\n/**\n * A wrapper for mapbox-gl's Map class\n */\nexport default class Mapbox<\n StyleT extends MapStyle = MapStyle,\n CallbacksT extends Callbacks = {},\n MapT extends MapInstance = MapInstance\n> {\n private _MapClass: {new (options: any): MapInstance};\n // mapboxgl.Map instance\n private _map: MapInstanceInternal = null;\n // User-supplied props\n props: MapboxProps;\n\n // Mapbox map is stateful.\n // During method calls/user interactions, map.transform is mutated and\n // deviate from user-supplied props.\n // In order to control the map reactively, we shadow the transform\n // with the one below, which reflects the view state resolved from\n // both user-supplied props and the underlying state\n private _renderTransform: Transform;\n\n // Internal states\n private _internalUpdate: boolean = false;\n private _inRender: boolean = false;\n private _hoveredFeatures: MapGeoJSONFeature[] = null;\n private _deferredEvents: {\n move: boolean;\n zoom: boolean;\n pitch: boolean;\n rotate: boolean;\n } = {\n move: false,\n zoom: false,\n pitch: false,\n rotate: false\n };\n\n static savedMaps: Mapbox[] = [];\n\n constructor(\n MapClass: {new (options: any): MapInstance},\n props: MapboxProps,\n container: HTMLDivElement\n ) {\n this._MapClass = MapClass;\n this.props = props;\n this._initialize(container);\n }\n\n get map(): MapT {\n return this._map;\n }\n\n get transform(): Transform {\n return this._renderTransform;\n }\n\n setProps(props: MapboxProps) {\n const oldProps = this.props;\n this.props = props;\n\n const settingsChanged = this._updateSettings(props, oldProps);\n if (settingsChanged) {\n this._createShadowTransform(this._map);\n }\n const sizeChanged = this._updateSize(props);\n const viewStateChanged = this._updateViewState(props, true);\n this._updateStyle(props, oldProps);\n this._updateStyleComponents(props, oldProps);\n this._updateHandlers(props, oldProps);\n\n // If 1) view state has changed to match props and\n // 2) the props change is not triggered by map events,\n // it's driven by an external state change. Redraw immediately\n if (settingsChanged || sizeChanged || (viewStateChanged && !this._map.isMoving())) {\n this.redraw();\n }\n }\n\n static reuse(\n props: MapboxProps,\n container: HTMLDivElement\n ): Mapbox {\n const that = Mapbox.savedMaps.pop() as Mapbox;\n if (!that) {\n return null;\n }\n\n const map = that.map;\n // When reusing the saved map, we need to reparent the map(canvas) and other child nodes\n // intoto the new container from the props.\n // Step 1: reparenting child nodes from old container to new container\n const oldContainer = map.getContainer();\n container.className = oldContainer.className;\n while (oldContainer.childNodes.length > 0) {\n container.appendChild(oldContainer.childNodes[0]);\n }\n // Step 2: replace the internal container with new container from the react component\n // @ts-ignore\n map._container = container;\n\n // With maplibre-gl as mapLib, map uses ResizeObserver to observe when its container resizes.\n // When reusing the saved map, we need to disconnect the observer and observe the new container.\n // Step 3: telling the ResizeObserver to disconnect and observe the new container\n // @ts-ignore\n const resizeObserver = map._resizeObserver;\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver.observe(container);\n }\n\n // Step 4: apply new props\n that.setProps({...props, styleDiffing: false});\n map.resize();\n const {initialViewState} = props;\n if (initialViewState) {\n if (initialViewState.bounds) {\n map.fitBounds(initialViewState.bounds, {...initialViewState.fitBoundsOptions, duration: 0});\n } else {\n that._updateViewState(initialViewState, false);\n }\n }\n\n // Simulate load event\n if (map.isStyleLoaded()) {\n map.fire('load');\n } else {\n map.once('styledata', () => map.fire('load'));\n }\n\n // Force reload\n // @ts-ignore\n map._update();\n return that;\n }\n\n /* eslint-disable complexity,max-statements */\n _initialize(container: HTMLDivElement) {\n const {props} = this;\n const {mapStyle = DEFAULT_STYLE} = props;\n const mapOptions = {\n ...props,\n ...props.initialViewState,\n accessToken: props.mapboxAccessToken || getAccessTokenFromEnv() || null,\n container,\n style: normalizeStyle(mapStyle)\n };\n\n const viewState = mapOptions.initialViewState || mapOptions.viewState || mapOptions;\n Object.assign(mapOptions, {\n center: [viewState.longitude || 0, viewState.latitude || 0],\n zoom: viewState.zoom || 0,\n pitch: viewState.pitch || 0,\n bearing: viewState.bearing || 0\n });\n\n if (props.gl) {\n // eslint-disable-next-line\n const getContext = HTMLCanvasElement.prototype.getContext;\n // Hijack canvas.getContext to return our own WebGLContext\n // This will be called inside the mapboxgl.Map constructor\n // @ts-expect-error\n HTMLCanvasElement.prototype.getContext = () => {\n // Unhijack immediately\n HTMLCanvasElement.prototype.getContext = getContext;\n return props.gl;\n };\n }\n\n const map = new this._MapClass(mapOptions) as MapInstanceInternal;\n // Props that are not part of constructor options\n if (viewState.padding) {\n map.setPadding(viewState.padding);\n }\n if (props.cursor) {\n map.getCanvas().style.cursor = props.cursor;\n }\n this._createShadowTransform(map);\n\n // Hack\n // Insert code into map's render cycle\n const renderMap = map._render;\n map._render = (arg: number) => {\n this._inRender = true;\n renderMap.call(map, arg);\n this._inRender = false;\n };\n const runRenderTaskQueue = map._renderTaskQueue.run;\n map._renderTaskQueue.run = (arg: number) => {\n runRenderTaskQueue.call(map._renderTaskQueue, arg);\n this._onBeforeRepaint();\n };\n map.on('render', () => this._onAfterRepaint());\n // Insert code into map's event pipeline\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const fireEvent = map.fire;\n map.fire = this._fireEvent.bind(this, fireEvent);\n\n // add listeners\n map.on('resize', () => {\n this._renderTransform.resize(map.transform.width, map.transform.height);\n });\n map.on('styledata', () => {\n this._updateStyleComponents(this.props, {});\n // Projection can be set in stylesheet\n syncProjection(map.transform, this._renderTransform);\n });\n map.on('sourcedata', () => this._updateStyleComponents(this.props, {}));\n for (const eventName in pointerEvents) {\n map.on(eventName, this._onPointerEvent);\n }\n for (const eventName in cameraEvents) {\n map.on(eventName, this._onCameraEvent);\n }\n for (const eventName in otherEvents) {\n map.on(eventName, this._onEvent);\n }\n this._map = map;\n }\n /* eslint-enable complexity,max-statements */\n\n recycle() {\n // Clean up unnecessary elements before storing for reuse.\n const container = this.map.getContainer();\n const children = container.querySelector('[mapboxgl-children]');\n children?.remove();\n\n Mapbox.savedMaps.push(this);\n }\n\n destroy() {\n this._map.remove();\n }\n\n // Force redraw the map now. Typically resize() and jumpTo() is reflected in the next\n // render cycle, which is managed by Mapbox's animation loop.\n // This removes the synchronization issue caused by requestAnimationFrame.\n redraw() {\n const map = this._map as any;\n // map._render will throw error if style does not exist\n // https://github.com/mapbox/mapbox-gl-js/blob/fb9fc316da14e99ff4368f3e4faa3888fb43c513\n // /src/ui/map.js#L1834\n if (!this._inRender && map.style) {\n // cancel the scheduled update\n if (map._frame) {\n map._frame.cancel();\n map._frame = null;\n }\n // the order is important - render() may schedule another update\n map._render();\n }\n }\n\n _createShadowTransform(map: any) {\n const renderTransform = cloneTransform(map.transform);\n map.painter.transform = renderTransform;\n\n this._renderTransform = renderTransform;\n }\n\n /* Trigger map resize if size is controlled\n @param {object} nextProps\n @returns {bool} true if size has changed\n */\n _updateSize(nextProps: MapboxProps): boolean {\n // Check if size is controlled\n const {viewState} = nextProps;\n if (viewState) {\n const map = this._map;\n if (viewState.width !== map.transform.width || viewState.height !== map.transform.height) {\n map.resize();\n return true;\n }\n }\n return false;\n }\n\n // Adapted from map.jumpTo\n /* Update camera to match props\n @param {object} nextProps\n @param {bool} triggerEvents - should fire camera events\n @returns {bool} true if anything is changed\n */\n _updateViewState(nextProps: MapboxProps, triggerEvents: boolean): boolean {\n if (this._internalUpdate) {\n return false;\n }\n const map = this._map;\n\n const tr = this._renderTransform;\n // Take a snapshot of the transform before mutation\n const {zoom, pitch, bearing} = tr;\n const isMoving = map.isMoving();\n\n if (isMoving) {\n // All movement of the camera is done relative to the sea level\n tr.cameraElevationReference = 'sea';\n }\n const changed = applyViewStateToTransform(tr, {\n ...transformToViewState(map.transform),\n ...nextProps\n });\n if (isMoving) {\n // Reset camera reference\n tr.cameraElevationReference = 'ground';\n }\n\n if (changed && triggerEvents) {\n const deferredEvents = this._deferredEvents;\n // Delay DOM control updates to the next render cycle\n deferredEvents.move = true;\n deferredEvents.zoom ||= zoom !== tr.zoom;\n deferredEvents.rotate ||= bearing !== tr.bearing;\n deferredEvents.pitch ||= pitch !== tr.pitch;\n }\n\n // Avoid manipulating the real transform when interaction/animation is ongoing\n // as it would interfere with Mapbox's handlers\n if (!isMoving) {\n applyViewStateToTransform(map.transform, nextProps);\n }\n\n return changed;\n }\n\n /* Update camera constraints and projection settings to match props\n @param {object} nextProps\n @param {object} currProps\n @returns {bool} true if anything is changed\n */\n _updateSettings(nextProps: MapboxProps, currProps: MapboxProps): boolean {\n const map = this._map;\n let changed = false;\n for (const propName of settingNames) {\n if (propName in nextProps && !deepEqual(nextProps[propName], currProps[propName])) {\n changed = true;\n const setter = map[`set${propName[0].toUpperCase()}${propName.slice(1)}`];\n setter?.call(map, nextProps[propName]);\n }\n }\n return changed;\n }\n\n /* Update map style to match props\n @param {object} nextProps\n @param {object} currProps\n @returns {bool} true if style is changed\n */\n _updateStyle(nextProps: MapboxProps, currProps: MapboxProps): boolean {\n if (nextProps.cursor !== currProps.cursor) {\n this._map.getCanvas().style.cursor = nextProps.cursor || '';\n }\n if (nextProps.mapStyle !== currProps.mapStyle) {\n const {mapStyle = DEFAULT_STYLE, styleDiffing = true} = nextProps;\n const options: any = {\n diff: styleDiffing\n };\n if ('localIdeographFontFamily' in nextProps) {\n // @ts-ignore Mapbox specific prop\n options.localIdeographFontFamily = nextProps.localIdeographFontFamily;\n }\n this._map.setStyle(normalizeStyle(mapStyle), options);\n return true;\n }\n return false;\n }\n\n /* Update fog, light and terrain to match props\n @param {object} nextProps\n @param {object} currProps\n @returns {bool} true if anything is changed\n */\n _updateStyleComponents(nextProps: MapboxProps, currProps: MapboxProps): boolean {\n const map = this._map;\n let changed = false;\n if (map.isStyleLoaded()) {\n if ('light' in nextProps && map.setLight && !deepEqual(nextProps.light, currProps.light)) {\n changed = true;\n map.setLight(nextProps.light);\n }\n if ('fog' in nextProps && map.setFog && !deepEqual(nextProps.fog, currProps.fog)) {\n changed = true;\n map.setFog(nextProps.fog);\n }\n if (\n 'terrain' in nextProps &&\n map.setTerrain &&\n !deepEqual(nextProps.terrain, currProps.terrain)\n ) {\n if (!nextProps.terrain || map.getSource(nextProps.terrain.source)) {\n changed = true;\n map.setTerrain(nextProps.terrain);\n }\n }\n }\n return changed;\n }\n\n /* Update interaction handlers to match props\n @param {object} nextProps\n @param {object} currProps\n @returns {bool} true if anything is changed\n */\n _updateHandlers(nextProps: MapboxProps, currProps: MapboxProps): boolean {\n const map = this._map;\n let changed = false;\n for (const propName of handlerNames) {\n const newValue = nextProps[propName] ?? true;\n const oldValue = currProps[propName] ?? true;\n if (!deepEqual(newValue, oldValue)) {\n changed = true;\n if (newValue) {\n map[propName].enable(newValue);\n } else {\n map[propName].disable();\n }\n }\n }\n return changed;\n }\n\n _onEvent = (e: MapEvent) => {\n // @ts-ignore\n const cb = this.props[otherEvents[e.type]];\n if (cb) {\n cb(e);\n } else if (e.type === 'error') {\n console.error((e as ErrorEvent).error); // eslint-disable-line\n }\n };\n\n private _queryRenderedFeatures(point: Point) {\n const map = this._map;\n const tr = map.transform;\n const {interactiveLayerIds = []} = this.props;\n try {\n map.transform = this._renderTransform;\n return map.queryRenderedFeatures(point, {\n layers: interactiveLayerIds.filter(map.getLayer.bind(map))\n });\n } catch {\n // May fail if style is not loaded\n return [];\n } finally {\n map.transform = tr;\n }\n }\n\n _updateHover(e: MapMouseEvent) {\n const {props} = this;\n const shouldTrackHoveredFeatures =\n props.interactiveLayerIds && (props.onMouseMove || props.onMouseEnter || props.onMouseLeave);\n\n if (shouldTrackHoveredFeatures) {\n const eventType = e.type;\n const wasHovering = this._hoveredFeatures?.length > 0;\n const features = this._queryRenderedFeatures(e.point);\n const isHovering = features.length > 0;\n\n if (!isHovering && wasHovering) {\n e.type = 'mouseleave';\n this._onPointerEvent(e);\n }\n this._hoveredFeatures = features;\n if (isHovering && !wasHovering) {\n e.type = 'mouseenter';\n this._onPointerEvent(e);\n }\n e.type = eventType;\n } else {\n this._hoveredFeatures = null;\n }\n }\n\n _onPointerEvent = (e: MapMouseEvent | MapMouseEvent) => {\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n this._updateHover(e);\n }\n\n // @ts-ignore\n const cb = this.props[pointerEvents[e.type]];\n if (cb) {\n if (this.props.interactiveLayerIds && e.type !== 'mouseover' && e.type !== 'mouseout') {\n e.features = this._hoveredFeatures || this._queryRenderedFeatures(e.point);\n }\n cb(e);\n delete e.features;\n }\n };\n\n _onCameraEvent = (e: ViewStateChangeEvent) => {\n if (!this._internalUpdate) {\n // @ts-ignore\n const cb = this.props[cameraEvents[e.type]];\n if (cb) {\n cb(e);\n }\n }\n if (e.type in this._deferredEvents) {\n this._deferredEvents[e.type] = false;\n }\n };\n\n _fireEvent(baseFire: Function, event: string | MapEvent, properties?: object) {\n const map = this._map;\n const tr = map.transform;\n\n const eventType = typeof event === 'string' ? event : event.type;\n if (eventType === 'move') {\n this._updateViewState(this.props, false);\n }\n if (eventType in cameraEvents) {\n if (typeof event === 'object') {\n (event as unknown as ViewStateChangeEvent).viewState = transformToViewState(tr);\n }\n if (this._map.isMoving()) {\n // Replace map.transform with ours during the callbacks\n map.transform = this._renderTransform;\n baseFire.call(map, event, properties);\n map.transform = tr;\n\n return map;\n }\n }\n baseFire.call(map, event, properties);\n\n return map;\n }\n\n // All camera manipulations are complete, ready to repaint\n _onBeforeRepaint() {\n const map = this._map;\n\n // If there are camera changes driven by props, invoke camera events so that DOM controls are synced\n this._internalUpdate = true;\n for (const eventType in this._deferredEvents) {\n if (this._deferredEvents[eventType]) {\n map.fire(eventType);\n }\n }\n this._internalUpdate = false;\n\n const tr = this._map.transform;\n // Make sure camera matches the current props\n map.transform = this._renderTransform;\n\n this._onAfterRepaint = () => {\n // Mapbox transitions between non-mercator projection and mercator during render time\n // Copy it back to the other\n syncProjection(this._renderTransform, tr);\n // Restores camera state before render/load events are fired\n map.transform = tr;\n };\n }\n\n _onAfterRepaint: () => void;\n}\n\n/**\n * Access token can be provided via one of:\n * mapboxAccessToken prop\n * access_token query parameter\n * MapboxAccessToken environment variable\n * REACT_APP_MAPBOX_ACCESS_TOKEN environment variable\n * @returns access token\n */\nfunction getAccessTokenFromEnv(): string {\n let accessToken = null;\n\n /* global location, process */\n if (typeof location !== 'undefined') {\n const match = /access_token=([^&\\/]*)/.exec(location.search);\n accessToken = match && match[1];\n }\n\n // Note: This depends on bundler plugins (e.g. webpack) importing environment correctly\n try {\n accessToken = accessToken || process.env.MapboxAccessToken;\n } catch {\n // ignore\n }\n\n try {\n accessToken = accessToken || process.env.REACT_APP_MAPBOX_ACCESS_TOKEN;\n } catch {\n // ignore\n }\n\n return accessToken;\n}\n","import type {\n MapInstance,\n MapInstanceInternal,\n MapStyle,\n Callbacks,\n LngLatLike,\n PointLike\n} from '../types';\nimport type Mapbox from './mapbox';\n\n/** These methods may break the react binding if called directly */\nconst skipMethods = [\n 'setMaxBounds',\n 'setMinZoom',\n 'setMaxZoom',\n 'setMinPitch',\n 'setMaxPitch',\n 'setRenderWorldCopies',\n 'setProjection',\n 'setStyle',\n 'addSource',\n 'removeSource',\n 'addLayer',\n 'removeLayer',\n 'setLayerZoomRange',\n 'setFilter',\n 'setPaintProperty',\n 'setLayoutProperty',\n 'setLight',\n 'setTerrain',\n 'setFog',\n 'remove'\n] as const;\n\nexport type MapRef = {\n getMap(): MapT;\n} & Omit;\n\nexport default function createRef<\n StyleT extends MapStyle,\n CallbacksT extends Callbacks,\n MapT extends MapInstance\n>(mapInstance: Mapbox): MapRef | null {\n if (!mapInstance) {\n return null;\n }\n\n const map = mapInstance.map as MapInstanceInternal;\n const result: any = {\n getMap: () => map,\n\n // Overwrite getters to use our shadow transform\n getCenter: () => mapInstance.transform.center,\n getZoom: () => mapInstance.transform.zoom,\n getBearing: () => mapInstance.transform.bearing,\n getPitch: () => mapInstance.transform.pitch,\n getPadding: () => mapInstance.transform.padding,\n getBounds: () => mapInstance.transform.getBounds(),\n project: (lnglat: LngLatLike) => {\n const tr = map.transform;\n map.transform = mapInstance.transform;\n const result = map.project(lnglat);\n map.transform = tr;\n return result;\n },\n unproject: (point: PointLike) => {\n const tr = map.transform;\n map.transform = mapInstance.transform;\n const result = map.unproject(point);\n map.transform = tr;\n return result;\n },\n // options diverge between mapbox and maplibre\n queryTerrainElevation: (lnglat: LngLatLike, options?: any) => {\n const tr = map.transform;\n map.transform = mapInstance.transform;\n const result = map.queryTerrainElevation(lnglat, options);\n map.transform = tr;\n return result;\n },\n queryRenderedFeatures: (geometry?: any, options?: any) => {\n const tr = map.transform;\n map.transform = mapInstance.transform;\n const result = map.queryRenderedFeatures(geometry, options);\n map.transform = tr;\n return result;\n }\n };\n\n for (const key of getMethodNames(map)) {\n // @ts-expect-error\n if (!(key in result) && !skipMethods.includes(key)) {\n result[key] = map[key].bind(map);\n }\n }\n\n return result;\n}\n\nfunction getMethodNames(obj: Object) {\n const result = new Set();\n\n let proto = obj;\n while (proto) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (\n key[0] !== '_' &&\n typeof obj[key] === 'function' &&\n key !== 'fire' &&\n key !== 'setEventedParent'\n ) {\n result.add(key);\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n return Array.from(result);\n}\n","// From https://github.com/streamich/react-use/blob/master/src/useIsomorphicLayoutEffect.ts\n// useLayoutEffect but does not trigger warning in server-side rendering\nimport {useEffect, useLayoutEffect} from 'react';\n\nconst useIsomorphicLayoutEffect = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport default useIsomorphicLayoutEffect;\n","export type GlobalSettings = {\n /** The map's default API URL for requesting tiles, styles, sprites, and glyphs. */\n baseApiUrl?: string;\n /** The maximum number of images (raster tiles, sprites, icons) to load in parallel.\n * @default 16\n */\n maxParallelImageRequests?: number;\n /** The map's RTL text plugin. Necessary for supporting the Arabic and Hebrew languages, which are written right-to-left. */\n RTLTextPlugin?: string | false;\n /** Provides an interface for external module bundlers such as Webpack or Rollup to package mapbox-gl's WebWorker into a separate class and integrate it with the library.\nTakes precedence over `workerUrl`. */\n workerClass?: any;\n /** The number of web workers instantiated on a page with mapbox-gl maps.\n * @default 2\n */\n workerCount?: number;\n /** Provides an interface for loading mapbox-gl's WebWorker bundle from a self-hosted URL.\n * This is useful if your site needs to operate in a strict CSP (Content Security Policy) environment\n * wherein you are not allowed to load JavaScript code from a Blob URL, which is default behavior. */\n workerUrl?: string;\n};\n\nconst globalSettings = [\n 'baseApiUrl',\n 'maxParallelImageRequests',\n 'workerClass',\n 'workerCount',\n 'workerUrl'\n] as const;\n\nexport default function setGlobals(mapLib: any, props: GlobalSettings) {\n for (const key of globalSettings) {\n if (key in props) {\n mapLib[key] = props[key];\n }\n }\n\n const {\n RTLTextPlugin = 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.js'\n } = props;\n if (\n RTLTextPlugin &&\n mapLib.getRTLTextPluginStatus &&\n mapLib.getRTLTextPluginStatus() === 'unavailable'\n ) {\n mapLib.setRTLTextPlugin(\n RTLTextPlugin,\n (error?: Error) => {\n if (error) {\n // eslint-disable-next-line\n console.error(error);\n }\n },\n true\n );\n }\n}\n","import * as React from 'react';\nimport {useState, useRef, useEffect, useContext, useMemo, useImperativeHandle} from 'react';\n\nimport {MountedMapsContext} from './use-map';\nimport Mapbox, {MapboxProps} from '../mapbox/mapbox';\nimport createRef, {MapRef} from '../mapbox/create-ref';\n\nimport type {CSSProperties} from 'react';\nimport useIsomorphicLayoutEffect from '../utils/use-isomorphic-layout-effect';\nimport setGlobals, {GlobalSettings} from '../utils/set-globals';\nimport type {MapLib, MapInstance, MapStyle, Callbacks} from '../types';\n\nexport type MapContextValue = {\n mapLib: MapLib;\n map: MapRef;\n};\n\nexport const MapContext = React.createContext(null);\n\ntype MapInitOptions = Omit<\n MapOptions,\n 'style' | 'container' | 'bounds' | 'fitBoundsOptions' | 'center'\n>;\n\nexport type MapProps<\n MapOptions,\n StyleT extends MapStyle,\n CallbacksT extends Callbacks,\n MapT extends MapInstance\n> = MapInitOptions &\n MapboxProps &\n GlobalSettings & {\n mapLib?: MapLib | Promise>;\n reuseMaps?: boolean;\n /** Map container id */\n id?: string;\n /** Map container CSS style */\n style?: CSSProperties;\n children?: any;\n };\n\nexport default function Map<\n MapOptions,\n StyleT extends MapStyle,\n CallbacksT extends Callbacks,\n MapT extends MapInstance\n>(\n props: MapProps,\n ref: React.Ref>,\n defaultLib: MapLib | Promise>\n) {\n const mountedMapsContext = useContext(MountedMapsContext);\n const [mapInstance, setMapInstance] = useState>(null);\n const containerRef = useRef();\n\n const {current: contextValue} = useRef>({mapLib: null, map: null});\n\n useEffect(() => {\n const mapLib = props.mapLib;\n let isMounted = true;\n let mapbox: Mapbox;\n\n Promise.resolve(mapLib || defaultLib)\n .then((module: MapLib | {default: MapLib}) => {\n if (!isMounted) {\n return;\n }\n if (!module) {\n throw new Error('Invalid mapLib');\n }\n const mapboxgl = 'Map' in module ? module : module.default;\n if (!mapboxgl.Map) {\n throw new Error('Invalid mapLib');\n }\n\n // workerUrl & workerClass may change the result of supported()\n // https://github.com/visgl/react-map-gl/discussions/2027\n setGlobals(mapboxgl, props);\n if (!mapboxgl.supported || mapboxgl.supported(props)) {\n if (props.reuseMaps) {\n mapbox = Mapbox.reuse(props, containerRef.current);\n }\n if (!mapbox) {\n mapbox = new Mapbox(mapboxgl.Map, props, containerRef.current);\n }\n contextValue.map = createRef(mapbox);\n contextValue.mapLib = mapboxgl;\n\n setMapInstance(mapbox);\n mountedMapsContext?.onMapMount(contextValue.map, props.id);\n } else {\n throw new Error('Map is not supported by this browser');\n }\n })\n .catch(error => {\n const {onError} = props;\n if (onError) {\n onError({\n type: 'error',\n target: null,\n originalEvent: null,\n error\n });\n } else {\n console.error(error); // eslint-disable-line\n }\n });\n\n return () => {\n isMounted = false;\n if (mapbox) {\n mountedMapsContext?.onMapUnmount(props.id);\n if (props.reuseMaps) {\n mapbox.recycle();\n } else {\n mapbox.destroy();\n }\n }\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (mapInstance) {\n mapInstance.setProps(props);\n }\n });\n\n useImperativeHandle(ref, () => contextValue.map, [mapInstance]);\n\n const style: CSSProperties = useMemo(\n () => ({\n position: 'relative',\n width: '100%',\n height: '100%',\n ...props.style\n }),\n [props.style]\n );\n\n const CHILD_CONTAINER_STYLE = {\n height: '100%'\n };\n\n return (\n
\n {mapInstance && (\n \n
\n {props.children}\n
\n
\n )}\n
\n );\n}\n","import * as React from 'react';\n// This is a simplified version of\n// https://github.com/facebook/react/blob/4131af3e4bf52f3a003537ec95a1655147c81270/src/renderers/dom/shared/CSSPropertyOperations.js#L62\nconst unitlessNumber = /box|flex|grid|column|lineHeight|fontWeight|opacity|order|tabSize|zIndex/;\n\nexport function applyReactStyle(element: HTMLElement, styles: React.CSSProperties) {\n if (!element || !styles) {\n return;\n }\n const style = element.style;\n\n for (const key in styles) {\n const value = styles[key];\n if (Number.isFinite(value) && !unitlessNumber.test(key)) {\n style[key] = `${value}px`;\n } else {\n style[key] = value;\n }\n }\n}\n","/* global document */\nimport * as React from 'react';\nimport {createPortal} from 'react-dom';\nimport {useImperativeHandle, useEffect, useMemo, useRef, useContext, forwardRef, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\n\nimport type {MarkerEvent, MarkerDragEvent, PointLike, MarkerInstance} from '../types';\n\nimport {MapContext} from './map';\nimport {arePointsEqual} from '../utils/deep-equal';\n\nexport type MarkerProps = OptionsT & {\n /** Longitude of the anchor location */\n longitude: number;\n /** Latitude of the anchor location */\n latitude: number;\n\n // These types will be further constraint by OptionsT\n draggable?: boolean;\n offset?: PointLike;\n pitchAlignment?: string;\n rotation?: number;\n rotationAlignment?: string;\n popup?: any;\n\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n onClick?: (e: MarkerEvent) => void;\n onDragStart?: (e: MarkerDragEvent) => void;\n onDrag?: (e: MarkerDragEvent) => void;\n onDragEnd?: (e: MarkerDragEvent) => void;\n children?: React.ReactNode;\n};\n\n/* eslint-disable complexity,max-statements */\nfunction Marker(\n props: MarkerProps,\n ref: React.Ref\n) {\n const {map, mapLib} = useContext(MapContext);\n const thisRef = useRef({props});\n thisRef.current.props = props;\n\n const marker: MarkerT = useMemo(() => {\n let hasChildren = false;\n React.Children.forEach(props.children, el => {\n if (el) {\n hasChildren = true;\n }\n });\n const options = {\n ...props,\n element: hasChildren ? document.createElement('div') : null\n };\n\n const mk = new mapLib.Marker(options) as MarkerT;\n mk.setLngLat([props.longitude, props.latitude]);\n\n mk.getElement().addEventListener('click', (e: MouseEvent) => {\n thisRef.current.props.onClick?.({\n type: 'click',\n target: mk,\n originalEvent: e\n });\n });\n\n mk.on('dragstart', e => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragStart?.(evt);\n });\n mk.on('drag', e => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDrag?.(evt);\n });\n mk.on('dragend', e => {\n const evt = e as MarkerDragEvent;\n evt.lngLat = marker.getLngLat();\n thisRef.current.props.onDragEnd?.(evt);\n });\n\n return mk;\n }, []);\n\n useEffect(() => {\n marker.addTo(map.getMap());\n\n return () => {\n marker.remove();\n };\n }, []);\n\n const {\n longitude,\n latitude,\n offset,\n style,\n draggable = false,\n popup = null,\n rotation = 0,\n rotationAlignment = 'auto',\n pitchAlignment = 'auto'\n } = props;\n\n useEffect(() => {\n applyReactStyle(marker.getElement(), style);\n }, [style]);\n\n useImperativeHandle(ref, () => marker, []);\n\n if (marker.getLngLat().lng !== longitude || marker.getLngLat().lat !== latitude) {\n marker.setLngLat([longitude, latitude]);\n }\n if (offset && !arePointsEqual(marker.getOffset(), offset)) {\n marker.setOffset(offset);\n }\n if (marker.isDraggable() !== draggable) {\n marker.setDraggable(draggable);\n }\n if (marker.getRotation() !== rotation) {\n marker.setRotation(rotation);\n }\n if (marker.getRotationAlignment() !== rotationAlignment) {\n marker.setRotationAlignment(rotationAlignment);\n }\n if (marker.getPitchAlignment() !== pitchAlignment) {\n marker.setPitchAlignment(pitchAlignment);\n }\n if (marker.getPopup() !== popup) {\n marker.setPopup(popup);\n }\n\n return createPortal(props.children, marker.getElement());\n}\n\nexport default memo(forwardRef(Marker));\n","/* global document */\nimport * as React from 'react';\nimport {createPortal} from 'react-dom';\nimport {useImperativeHandle, useEffect, useMemo, useRef, useContext, forwardRef, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\n\nimport type {PopupEvent, PopupInstance} from '../types';\n\nimport {MapContext} from './map';\nimport {deepEqual} from '../utils/deep-equal';\n\nexport type PopupProps = OptionsT & {\n /** Longitude of the anchor location */\n longitude: number;\n /** Latitude of the anchor location */\n latitude: number;\n\n // These types will be further constraint by OptionsT\n anchor?: string;\n offset?: any;\n className?: string;\n maxWidth?: string;\n\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n\n onOpen?: (e: PopupEvent) => void;\n onClose?: (e: PopupEvent) => void;\n children?: React.ReactNode;\n};\n\n// Adapted from https://github.com/mapbox/mapbox-gl-js/blob/v1.13.0/src/ui/popup.js\nfunction getClassList(className: string) {\n return new Set(className ? className.trim().split(/\\s+/) : []);\n}\n\n/* eslint-disable complexity,max-statements */\nfunction Popup(\n props: PopupProps,\n ref: React.Ref\n) {\n const {map, mapLib} = useContext(MapContext);\n const container = useMemo(() => {\n return document.createElement('div');\n }, []);\n const thisRef = useRef({props});\n thisRef.current.props = props;\n\n const popup: PopupT = useMemo(() => {\n const options = {...props};\n const pp = new mapLib.Popup(options) as PopupT;\n pp.setLngLat([props.longitude, props.latitude]);\n pp.once('open', e => {\n thisRef.current.props.onOpen?.(e as PopupEvent);\n });\n return pp;\n }, []);\n\n useEffect(() => {\n const onClose = e => {\n thisRef.current.props.onClose?.(e as PopupEvent);\n };\n popup.on('close', onClose);\n popup.setDOMContent(container).addTo(map.getMap());\n\n return () => {\n // https://github.com/visgl/react-map-gl/issues/1825\n // onClose should not be fired if the popup is removed by unmounting\n // When using React strict mode, the component is mounted twice.\n // Firing the onClose callback here would be a false signal to remove the component.\n popup.off('close', onClose);\n if (popup.isOpen()) {\n popup.remove();\n }\n };\n }, []);\n\n useEffect(() => {\n applyReactStyle(popup.getElement(), props.style);\n }, [props.style]);\n\n useImperativeHandle(ref, () => popup, []);\n\n if (popup.isOpen()) {\n if (popup.getLngLat().lng !== props.longitude || popup.getLngLat().lat !== props.latitude) {\n popup.setLngLat([props.longitude, props.latitude]);\n }\n if (props.offset && !deepEqual(popup.options.offset, props.offset)) {\n popup.setOffset(props.offset);\n }\n if (popup.options.anchor !== props.anchor || popup.options.maxWidth !== props.maxWidth) {\n popup.options.anchor = props.anchor;\n popup.setMaxWidth(props.maxWidth);\n }\n if (popup.options.className !== props.className) {\n const prevClassList = getClassList(popup.options.className);\n const nextClassList = getClassList(props.className);\n\n for (const c of prevClassList) {\n if (!nextClassList.has(c)) {\n popup.removeClassName(c);\n }\n }\n for (const c of nextClassList) {\n if (!prevClassList.has(c)) {\n popup.addClassName(c);\n }\n }\n popup.options.className = props.className;\n }\n }\n\n return createPortal(props.children, container);\n}\n\nexport default memo(forwardRef(Popup));\n","import {useContext, useMemo, useEffect} from 'react';\nimport type {IControl, ControlPosition} from '../types';\nimport {MapContext} from './map';\nimport type {MapContextValue} from './map';\n\ntype ControlOptions = {\n position?: ControlPosition;\n};\n\nfunction useControl(\n onCreate: (context: MapContextValue) => T,\n opts?: ControlOptions\n): T;\n\nfunction useControl(\n onCreate: (context: MapContextValue) => T,\n onRemove: (context: MapContextValue) => void,\n opts?: ControlOptions\n): T;\n\nfunction useControl(\n onCreate: (context: MapContextValue) => T,\n onAdd: (context: MapContextValue) => void,\n onRemove: (context: MapContextValue) => void,\n opts?: ControlOptions\n): T;\n\nfunction useControl(\n onCreate: (context: MapContextValue) => T,\n arg1?: ((context: MapContextValue) => void) | ControlOptions,\n arg2?: ((context: MapContextValue) => void) | ControlOptions,\n arg3?: ControlOptions\n): T {\n const context = useContext(MapContext);\n const ctrl = useMemo(() => onCreate(context), []);\n\n useEffect(() => {\n const opts = (arg3 || arg2 || arg1) as ControlOptions;\n const onAdd = typeof arg1 === 'function' && typeof arg2 === 'function' ? arg1 : null;\n const onRemove = typeof arg2 === 'function' ? arg2 : typeof arg1 === 'function' ? arg1 : null;\n\n const {map} = context;\n if (!map.hasControl(ctrl)) {\n map.addControl(ctrl, opts?.position);\n if (onAdd) {\n onAdd(context);\n }\n }\n\n return () => {\n if (onRemove) {\n onRemove(context);\n }\n // Map might have been removed (parent effects are destroyed before child ones)\n if (map.hasControl(ctrl)) {\n map.removeControl(ctrl);\n }\n };\n }, []);\n\n return ctrl;\n}\n\nexport default useControl;\n","import * as React from 'react';\nimport {useEffect, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {ControlPosition, AttributionControlInstance} from '../types';\n\nexport type AttributionControlProps = OptionsT & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction AttributionControl(\n props: AttributionControlProps\n): null {\n const ctrl = useControl(\n ({mapLib}) => new mapLib.AttributionControl(props) as ControlT,\n {\n position: props.position\n }\n );\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport default memo(AttributionControl);\n","/* global document */\nimport * as React from 'react';\nimport {useEffect, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {ControlPosition, FullscreenControlInstance} from '../types';\n\nexport type FullscreenControlProps = Omit & {\n /** Id of the DOM element which should be made full screen. By default, the map container\n * element will be made full screen. */\n containerId?: string;\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction FullscreenControl(\n props: FullscreenControlProps\n): null {\n const ctrl = useControl(\n ({mapLib}) =>\n new mapLib.FullscreenControl({\n container: props.containerId && document.getElementById(props.containerId)\n }) as ControlT,\n {position: props.position}\n );\n\n useEffect(() => {\n applyReactStyle(ctrl._controlContainer, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport default memo(FullscreenControl);\n","import * as React from 'react';\nimport {useImperativeHandle, useRef, useEffect, forwardRef, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {\n ControlPosition,\n GeolocateControlInstance,\n GeolocateEvent,\n GeolocateResultEvent,\n GeolocateErrorEvent\n} from '../types';\n\nexport type GeolocateControlProps<\n OptionsT,\n ControlT extends GeolocateControlInstance\n> = OptionsT & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n\n /** Called on each Geolocation API position update that returned as success. */\n onGeolocate?: (e: GeolocateResultEvent) => void;\n /** Called on each Geolocation API position update that returned as an error. */\n onError?: (e: GeolocateErrorEvent) => void;\n /** Called on each Geolocation API position update that returned as success but user position\n * is out of map `maxBounds`. */\n onOutOfMaxBounds?: (e: GeolocateResultEvent) => void;\n /** Called when the GeolocateControl changes to the active lock state. */\n onTrackUserLocationStart?: (e: GeolocateEvent) => void;\n /** Called when the GeolocateControl changes to the background state. */\n onTrackUserLocationEnd?: (e: GeolocateEvent) => void;\n};\n\nfunction GeolocateControl(\n props: GeolocateControlProps,\n ref: React.Ref\n) {\n const thisRef = useRef({props});\n\n const ctrl = useControl(\n ({mapLib}) => {\n const gc = new mapLib.GeolocateControl(props) as ControlT;\n\n // Hack: fix GeolocateControl reuse\n // When using React strict mode, the component is mounted twice.\n // GeolocateControl's UI creation is asynchronous. Removing and adding it back causes the UI to be initialized twice.\n // @ts-expect-error private method\n const setupUI = gc._setupUI;\n // @ts-expect-error private method\n gc._setupUI = args => {\n if (!gc._container.hasChildNodes()) {\n setupUI(args);\n }\n };\n\n gc.on('geolocate', e => {\n thisRef.current.props.onGeolocate?.(e as GeolocateResultEvent);\n });\n gc.on('error', e => {\n thisRef.current.props.onError?.(e as GeolocateErrorEvent);\n });\n gc.on('outofmaxbounds', e => {\n thisRef.current.props.onOutOfMaxBounds?.(e as GeolocateResultEvent);\n });\n gc.on('trackuserlocationstart', e => {\n thisRef.current.props.onTrackUserLocationStart?.(e as GeolocateEvent);\n });\n gc.on('trackuserlocationend', e => {\n thisRef.current.props.onTrackUserLocationEnd?.(e as GeolocateEvent);\n });\n\n return gc;\n },\n {position: props.position}\n );\n\n thisRef.current.props = props;\n\n useImperativeHandle(ref, () => ctrl, []);\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport default memo(forwardRef(GeolocateControl));\n","import * as React from 'react';\nimport {useEffect, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {ControlPosition, NavigationControlInstance} from '../types';\n\nexport type NavigationControlProps = OptionsT & {\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction NavigationControl(\n props: NavigationControlProps\n): null {\n const ctrl = useControl(({mapLib}) => new mapLib.NavigationControl(props) as ControlT, {\n position: props.position\n });\n\n useEffect(() => {\n applyReactStyle(ctrl._container, props.style);\n }, [props.style]);\n\n return null;\n}\n\nexport default memo(NavigationControl);\n","import * as React from 'react';\nimport {useEffect, useRef, memo} from 'react';\nimport {applyReactStyle} from '../utils/apply-react-style';\nimport useControl from './use-control';\n\nimport type {ControlPosition, ScaleControlInstance} from '../types';\n\nexport type ScaleControlProps = OptionsT & {\n // These props will be further constraint by OptionsT\n unit?: string;\n maxWidth?: number;\n\n /** Placement of the control relative to the map. */\n position?: ControlPosition;\n /** CSS style override, applied to the control's container */\n style?: React.CSSProperties;\n};\n\nfunction ScaleControl(\n props: ScaleControlProps\n): null {\n const ctrl = useControl(({mapLib}) => new mapLib.ScaleControl(props) as ControlT, {\n position: props.position\n });\n const propsRef = useRef>(props);\n\n const prevProps = propsRef.current;\n propsRef.current = props;\n\n const {style} = props;\n\n if (props.maxWidth !== undefined && props.maxWidth !== prevProps.maxWidth) {\n ctrl.options.maxWidth = props.maxWidth;\n }\n if (props.unit !== undefined && props.unit !== prevProps.unit) {\n ctrl.setUnit(props.unit);\n }\n\n useEffect(() => {\n applyReactStyle(ctrl._container, style);\n }, [style]);\n\n return null;\n}\n\nexport default memo(ScaleControl);\n","export default function assert(condition: any, message: string) {\n if (!condition) {\n throw new Error(message);\n }\n}\n","import {useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport {MapContext} from './map';\nimport assert from '../utils/assert';\nimport {deepEqual} from '../utils/deep-equal';\n\nimport type {MapInstance, CustomLayerInterface, ILayer} from '../types';\n\n// Omiting property from a union type, see\n// https://github.com/microsoft/TypeScript/issues/39556#issuecomment-656925230\ntype OptionalId = T extends {id: string} ? Omit & {id?: string} : T;\ntype OptionalSource = T extends {source: string} ? Omit & {source?: string} : T;\n\nexport type LayerProps = OptionalSource> & {\n /** If set, the layer will be inserted before the specified layer */\n beforeId?: string;\n};\n\n/* eslint-disable complexity, max-statements */\nfunction updateLayer(\n map: MapInstance,\n id: string,\n props: LayerProps,\n prevProps: LayerProps\n) {\n assert(props.id === prevProps.id, 'layer id changed');\n assert(props.type === prevProps.type, 'layer type changed');\n\n if (props.type === 'custom' || prevProps.type === 'custom') {\n return;\n }\n\n const {layout = {}, paint = {}, filter, minzoom, maxzoom, beforeId} = props;\n\n if (beforeId !== prevProps.beforeId) {\n map.moveLayer(id, beforeId);\n }\n if (layout !== prevProps.layout) {\n const prevLayout = prevProps.layout || {};\n for (const key in layout) {\n if (!deepEqual(layout[key], prevLayout[key])) {\n map.setLayoutProperty(id, key, layout[key]);\n }\n }\n for (const key in prevLayout) {\n if (!layout.hasOwnProperty(key)) {\n map.setLayoutProperty(id, key, undefined);\n }\n }\n }\n if (paint !== prevProps.paint) {\n const prevPaint = prevProps.paint || {};\n for (const key in paint) {\n if (!deepEqual(paint[key], prevPaint[key])) {\n map.setPaintProperty(id, key, paint[key]);\n }\n }\n for (const key in prevPaint) {\n if (!paint.hasOwnProperty(key)) {\n map.setPaintProperty(id, key, undefined);\n }\n }\n }\n\n if (!deepEqual(filter, prevProps.filter)) {\n map.setFilter(id, filter);\n }\n if (minzoom !== prevProps.minzoom || maxzoom !== prevProps.maxzoom) {\n map.setLayerZoomRange(id, minzoom, maxzoom);\n }\n}\n\nfunction createLayer(\n map: MapInstance,\n id: string,\n props: LayerProps\n) {\n // @ts-ignore\n if (map.style && map.style._loaded && (!('source' in props) || map.getSource(props.source))) {\n const options: LayerProps = {...props, id};\n delete options.beforeId;\n\n // @ts-ignore\n map.addLayer(options, props.beforeId);\n }\n}\n\n/* eslint-enable complexity, max-statements */\n\nlet layerCounter = 0;\n\nfunction Layer(props: LayerProps) {\n const map = useContext(MapContext).map.getMap();\n const propsRef = useRef(props);\n const [, setStyleLoaded] = useState(0);\n\n const id = useMemo(() => props.id || `jsx-layer-${layerCounter++}`, []);\n\n useEffect(() => {\n if (map) {\n const forceUpdate = () => setStyleLoaded(version => version + 1);\n map.on('styledata', forceUpdate);\n forceUpdate();\n\n return () => {\n map.off('styledata', forceUpdate);\n // @ts-ignore\n if (map.style && map.style._loaded && map.getLayer(id)) {\n map.removeLayer(id);\n }\n };\n }\n return undefined;\n }, [map]);\n\n // @ts-ignore\n const layer = map && map.style && map.getLayer(id);\n if (layer) {\n try {\n updateLayer(map, id, props, propsRef.current);\n } catch (error) {\n console.warn(error); // eslint-disable-line\n }\n } else {\n createLayer(map, id, props);\n }\n\n // Store last rendered props\n propsRef.current = props;\n\n return null;\n}\n\nexport default Layer;\n","import * as React from 'react';\nimport {useContext, useEffect, useMemo, useState, useRef} from 'react';\nimport {cloneElement} from 'react';\nimport {MapContext} from './map';\nimport assert from '../utils/assert';\nimport {deepEqual} from '../utils/deep-equal';\n\nimport type {\n MapInstance,\n ISource,\n CustomSource,\n GeoJSONSourceImplementation,\n ImageSourceImplemtation,\n AnySourceImplementation\n} from '../types';\nimport type {GeoJSONSourceRaw, ImageSourceRaw, VectorSourceRaw} from '../types/style-spec-maplibre';\n\nexport type SourceProps = (SourceT | CustomSource) & {\n id?: string;\n children?: any;\n};\n\nlet sourceCounter = 0;\n\nfunction createSource(\n map: MapInstance,\n id: string,\n props: SourceProps\n) {\n // @ts-ignore\n if (map.style && map.style._loaded) {\n const options = {...props};\n delete options.id;\n delete options.children;\n // @ts-ignore\n map.addSource(id, options);\n return map.getSource(id);\n }\n return null;\n}\n\n/* eslint-disable complexity */\nfunction updateSource(\n source: AnySourceImplementation,\n props: SourceProps,\n prevProps: SourceProps\n) {\n assert(props.id === prevProps.id, 'source id changed');\n assert(props.type === prevProps.type, 'source type changed');\n\n let changedKey = '';\n let changedKeyCount = 0;\n\n for (const key in props) {\n if (key !== 'children' && key !== 'id' && !deepEqual(prevProps[key], props[key])) {\n changedKey = key;\n changedKeyCount++;\n }\n }\n\n if (!changedKeyCount) {\n return;\n }\n\n const type = props.type;\n\n if (type === 'geojson') {\n (source as GeoJSONSourceImplementation).setData(\n (props as unknown as GeoJSONSourceRaw).data as any\n );\n } else if (type === 'image') {\n (source as ImageSourceImplemtation).updateImage({\n url: (props as unknown as ImageSourceRaw).url,\n coordinates: (props as unknown as ImageSourceRaw).coordinates\n });\n } else if ('setCoordinates' in source && changedKeyCount === 1 && changedKey === 'coordinates') {\n source.setCoordinates((props as ImageSourceRaw).coordinates);\n } else if ('setUrl' in source) {\n // Added in 1.12.0:\n // vectorTileSource.setTiles\n // vectorTileSource.setUrl\n switch (changedKey) {\n case 'url':\n source.setUrl((props as VectorSourceRaw).url);\n break;\n case 'tiles':\n source.setTiles((props as VectorSourceRaw).tiles);\n break;\n default:\n }\n } else {\n // eslint-disable-next-line\n console.warn(`Unable to update prop: ${changedKey}`);\n }\n}\n/* eslint-enable complexity */\n\nfunction Source(props: SourceProps) {\n const map = useContext(MapContext).map.getMap();\n const propsRef = useRef(props);\n const [, setStyleLoaded] = useState(0);\n\n const id = useMemo(() => props.id || `jsx-source-${sourceCounter++}`, []);\n\n useEffect(() => {\n if (map) {\n /* global setTimeout */\n const forceUpdate = () => setTimeout(() => setStyleLoaded(version => version + 1), 0);\n map.on('styledata', forceUpdate);\n forceUpdate();\n\n return () => {\n map.off('styledata', forceUpdate);\n // @ts-ignore\n if (map.style && map.style._loaded && map.getSource(id)) {\n // Parent effects are destroyed before child ones, see\n // https://github.com/facebook/react/issues/16728\n // Source can only be removed after all child layers are removed\n const allLayers = map.getStyle()?.layers;\n if (allLayers) {\n for (const layer of allLayers) {\n // @ts-ignore (2339) source does not exist on all layer types\n if (layer.source === id) {\n map.removeLayer(layer.id);\n }\n }\n }\n map.removeSource(id);\n }\n };\n }\n return undefined;\n }, [map]);\n\n // @ts-ignore\n let source = map && map.style && map.getSource(id);\n if (source) {\n updateSource(source, props, propsRef.current);\n } else {\n source = createSource(map, id, props);\n }\n propsRef.current = props;\n\n return (\n (source &&\n React.Children.map(\n props.children,\n child =>\n child &&\n cloneElement(child, {\n source: id\n })\n )) ||\n null\n );\n}\n\nexport default Source;\n","import * as React from 'react';\nimport type {\n Map as MapboxMap,\n MapboxOptions,\n Marker as MapboxMarker,\n MarkerOptions,\n Popup as MapboxPopup,\n PopupOptions,\n AttributionControl as MapboxAttributionControl,\n FullscreenControl as MapboxFullscreenControl,\n GeolocateControl as MapboxGeolocateControl,\n NavigationControl as MapboxNavigationControl,\n ScaleControl as MapboxScaleControl\n} from 'mapbox-gl';\nimport {MapStyle, AnyLayer, AnySource} from './types/style-spec-mapbox';\n\nimport {default as _Map, MapProps as _MapProps} from './components/map';\nimport {default as _Marker, MarkerProps as _MarkerProps} from './components/marker';\nimport {default as _Popup, PopupProps as _PopupProps} from './components/popup';\nimport {\n default as _AttributionControl,\n AttributionControlProps as _AttributionControlProps\n} from './components/attribution-control';\nimport {\n default as _FullscreenControl,\n FullscreenControlProps as _FullscreenControlProps\n} from './components/fullscreen-control';\nimport {\n default as _GeolocateControl,\n GeolocateControlProps as _GeolocateControlProps\n} from './components/geolocate-control';\nimport {\n default as _NavigationControl,\n NavigationControlProps as _NavigationControlProps\n} from './components/navigation-control';\nimport {\n default as _ScaleControl,\n ScaleControlProps as _ScaleControlProps\n} from './components/scale-control';\nimport {default as _Layer, LayerProps as _LayerProps} from './components/layer';\nimport {default as _Source, SourceProps as _SourceProps} from './components/source';\nimport {useMap as _useMap} from './components/use-map';\nimport type {MapRef as _MapRef} from './mapbox/create-ref';\nimport type * as events from './types/events';\nimport type {MapCallbacks} from './types/events-mapbox';\n\nexport function useMap() {\n return _useMap();\n}\n\nexport type MapProps = _MapProps;\nexport type MapRef = _MapRef;\nconst mapLib = import('mapbox-gl');\nexport const Map = (() => {\n return React.forwardRef(function Map(props: MapProps, ref: React.Ref) {\n return _Map(props, ref, mapLib);\n });\n})();\n\nexport type MarkerProps = _MarkerProps;\nexport const Marker = _Marker as (\n props: MarkerProps & React.RefAttributes\n) => React.ReactElement | null;\n\nexport type PopupProps = _PopupProps;\nexport const Popup = _Popup as (\n props: PopupProps & React.RefAttributes\n) => React.ReactElement | null;\n\ntype AttributionControlOptions = ConstructorParameters[0];\nexport type AttributionControlProps = _AttributionControlProps;\nexport const AttributionControl = _AttributionControl as (\n props: AttributionControlProps\n) => React.ReactElement | null;\n\ntype FullscreenControlOptions = ConstructorParameters[0];\nexport type FullscreenControlProps = _FullscreenControlProps;\nexport const FullscreenControl = _FullscreenControl as (\n props: FullscreenControlProps\n) => React.ReactElement | null;\n\ntype NavigationControlOptions = ConstructorParameters[0];\nexport type NavigationControlProps = _NavigationControlProps;\nexport const NavigationControl = _NavigationControl as (\n props: NavigationControlProps\n) => React.ReactElement | null;\n\ntype GeolocateControlOptions = ConstructorParameters[0];\nexport type GeolocateControlProps = _GeolocateControlProps<\n GeolocateControlOptions,\n MapboxGeolocateControl\n>;\nexport const GeolocateControl = _GeolocateControl as (\n props: GeolocateControlProps & React.RefAttributes\n) => React.ReactElement | null;\n\ntype ScaleControlOptions = ConstructorParameters[0];\nexport type ScaleControlProps = _ScaleControlProps;\nexport const ScaleControl = _ScaleControl as (\n props: ScaleControlProps\n) => React.ReactElement | null;\n\nexport type LayerProps = _LayerProps;\nexport const Layer = _Layer as (props: LayerProps) => React.ReactElement | null;\n\nexport type SourceProps = _SourceProps;\nexport const Source = _Source as (props: SourceProps) => React.ReactElement | null;\n\nexport {default as useControl} from './components/use-control';\nexport {MapProvider} from './components/use-map';\n\nexport default Map;\n\n// Types\nexport * from './types/public';\nexport type {\n Point,\n PointLike,\n LngLat,\n LngLatLike,\n LngLatBounds,\n LngLatBoundsLike,\n PaddingOptions,\n MapboxGeoJSONFeature as MapGeoJSONFeature,\n GeoJSONSource,\n VideoSource,\n ImageSource,\n CanvasSource,\n VectorSourceImpl as VectorTileSource\n} from 'mapbox-gl';\nexport * from './types/style-spec-mapbox';\n\n// Events\nexport type {\n MapEvent,\n MapMouseEvent,\n MapLayerMouseEvent,\n MapTouchEvent,\n MapLayerTouchEvent,\n MapStyleDataEvent,\n MapSourceDataEvent,\n MapWheelEvent,\n MapBoxZoomEvent,\n ErrorEvent,\n ViewStateChangeEvent\n} from './types/events-mapbox';\nexport type PopupEvent = events.PopupEvent;\nexport type MarkerEvent = events.MarkerEvent;\nexport type MarkerDragEvent = events.MarkerDragEvent;\nexport type GeolocateEvent = events.GeolocateEvent;\nexport type GeolocateResultEvent = events.GeolocateResultEvent;\nexport type GeolocateErrorEvent = events.GeolocateErrorEvent;\n\n// v7.0 backward compatibility\n\n/** @deprecated use `MapStyle` */\nexport type MapboxStyle = MapStyle;\n\nexport type {Map as MapboxMap, MapboxEvent, MapboxGeoJSONFeature} from 'mapbox-gl';\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n \n \n \n \n \n);\n\nexport default IconoSVG;\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n \n \n);\n\nexport default IconoSVG;\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default IconoSVG;\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default IconoSVG;\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n\n \n\n \n\n \n\n \n \n);\n\nexport default IconoSVG;\n","/* eslint-disable max-len */\nconst IconoSVG = () => (\n \n \n \n \n \n \n \n);\n\nexport default IconoSVG\n","import Svglao from \"../assets/flags/lao.jsx\";\nimport SvgVietnam from \"../assets/flags/vietnam.jsx\";\nimport SvgMyanmar from \"../assets/flags/myanmar.jsx\";\nimport SvgNepal from \"../assets/flags/nepal.jsx\";\nimport SvgAfghanistan from \"../assets/flags/afghanistan.jsx\";\nimport SvgPakistan from \"../assets/flags/pakistan.jsx\";\n\nexport const COUNTRIES = [\n {\n ico: ,\n name: \"Viet Nam\",\n name_code: \"vietnam\",\n iso_code: \"VNM\",\n rescale: \"0,160\",\n center: {\n latitude: 14.0583,\n longitude: 108.2772,\n },\n },\n {\n ico: ,\n name: \"Lao\",\n name_code: \"laos\",\n iso_code: \"LAO\",\n rescale: \"0,160\",\n center: {\n latitude: 19.8563,\n longitude: 102.4955,\n },\n },\n {\n ico: ,\n name: \"Myanmar\",\n name_code: \"myanmar\",\n iso_code: \"MMR\",\n rescale: \"0,160\",\n center: {\n latitude: 21.9162,\n longitude: 95.956,\n },\n },\n {\n ico: ,\n name: \"Nepal\",\n name_code: \"nepal\",\n iso_code: \"NPL\",\n rescale: \"0,160\",\n center: {\n latitude: 28.3949,\n longitude: 84.124,\n },\n },\n {\n ico: ,\n name: \"Afghanistan\",\n name_code: \"afghanistan\",\n iso_code: \"AFG\",\n rescale: \"0,160\",\n center: {\n latitude: 33.9391,\n longitude: 67.71,\n },\n },\n {\n ico: ,\n name: \"Pakistan\",\n name_code: \"pakistan\",\n iso_code: \"PAK\",\n rescale: \"0,160\",\n center: {\n latitude: 30.3753,\n longitude: 69.3451,\n },\n },\n];\n\nexport const MIN_ZOOM_LAYOUT = 4;\nexport const MIN_ZOOM_LAYOUT_DATA = 8;\nexport const MAX_ZOOM_LAYOUT_DATA = 16;\nexport const MIN_ZOOM_HEADMAP=4;\nexport const MAX_ZOOM_HEADMAP=MIN_ZOOM_LAYOUT_DATA+0.1;\n\n\n\nexport const AMENITIES = {\n hospital: \"hospital.svg\",\n clinic: \"clinic.svg\",\n dentist: \"dentist.svg\",\n pharmacy: \"pharmacy.svg\",\n doctors: \"doctors.svg\",\n nursing_home: \"nursing_home.svg\",\n parking: \"parking.svg\",\n fuel: \"fuel.svg\",\n bus_station: \"bus_station.svg\",\n bicycle_parking: \"bicycle_parking.svg\",\n ferry_terminal: \"ferry_terminal.svg\",\n taxi: \"taxi.svg\",\n charging_station: \"charging_station.svg\",\n car_rental: \"car_rental.svg\",\n school: \"school.svg\",\n university: \"university.svg\",\n library: \"library.svg\",\n kindergarten: \"kindergarten.svg\",\n college: \"college.svg\",\n public_bookcase: \"public_bookcase.svg\",\n parking_entrance: \"parking_entrance.svg\",\n bicycle_rental: \"bicycle_rental.svg\",\n language_school: \"language_school.svg\",\n};\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nlet channelHandles = 1;\nlet animationHandles = 1;\nexport class Timeline {\n time = 0;\n channels = new Map();\n animations = new Map();\n playing = false;\n lastEngineTime = -1;\n constructor() { }\n addChannel(props) {\n const { delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1 } = props;\n const channelId = channelHandles++;\n const channel = {\n time: 0,\n delay,\n duration,\n rate,\n repeat\n };\n this._setChannelTime(channel, this.time);\n this.channels.set(channelId, channel);\n return channelId;\n }\n removeChannel(channelId) {\n this.channels.delete(channelId);\n for (const [animationHandle, animation] of this.animations) {\n if (animation.channel === channelId) {\n this.detachAnimation(animationHandle);\n }\n }\n }\n isFinished(channelId) {\n const channel = this.channels.get(channelId);\n if (channel === undefined) {\n return false;\n }\n return this.time >= channel.delay + channel.duration * channel.repeat;\n }\n getTime(channelId) {\n if (channelId === undefined) {\n return this.time;\n }\n const channel = this.channels.get(channelId);\n if (channel === undefined) {\n return -1;\n }\n return channel.time;\n }\n setTime(time) {\n this.time = Math.max(0, time);\n const channels = this.channels.values();\n for (const channel of channels) {\n this._setChannelTime(channel, this.time);\n }\n const animations = this.animations.values();\n for (const animationData of animations) {\n const { animation, channel } = animationData;\n animation.setTime(this.getTime(channel));\n }\n }\n play() {\n this.playing = true;\n }\n pause() {\n this.playing = false;\n this.lastEngineTime = -1;\n }\n reset() {\n this.setTime(0);\n }\n attachAnimation(animation, channelHandle) {\n const animationHandle = animationHandles++;\n this.animations.set(animationHandle, {\n animation,\n channel: channelHandle\n });\n animation.setTime(this.getTime(channelHandle));\n return animationHandle;\n }\n detachAnimation(channelId) {\n this.animations.delete(channelId);\n }\n update(engineTime) {\n if (this.playing) {\n if (this.lastEngineTime === -1) {\n this.lastEngineTime = engineTime;\n }\n this.setTime(this.time + (engineTime - this.lastEngineTime));\n this.lastEngineTime = engineTime;\n }\n }\n _setChannelTime(channel, time) {\n const offsetTime = time - channel.delay;\n const totalDuration = channel.duration * channel.repeat;\n // Note(Tarek): Don't loop on final repeat.\n if (offsetTime >= totalDuration) {\n channel.time = channel.duration * channel.rate;\n }\n else {\n channel.time = Math.max(0, offsetTime) % channel.duration;\n channel.time *= channel.rate;\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Recommendation is to ignore message but current test suite checks agains the\n// message so keep it for now.\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'shadertools: assertion failed.');\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../utils/assert.js\";\n/** Minimal validators for number and array types */\nconst DEFAULT_PROP_VALIDATORS = {\n number: {\n type: 'number',\n validate(value, propType) {\n return (Number.isFinite(value) &&\n typeof propType === 'object' &&\n (propType.max === undefined || value <= propType.max) &&\n (propType.min === undefined || value >= propType.min));\n }\n },\n array: {\n type: 'array',\n validate(value, propType) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n }\n }\n};\n/**\n * Parse a list of property types into property definitions that can be used to validate\n * values passed in by applications.\n * @param propTypes\n * @returns\n */\nexport function makePropValidators(propTypes) {\n const propValidators = {};\n for (const [name, propType] of Object.entries(propTypes)) {\n propValidators[name] = makePropValidator(propType);\n }\n return propValidators;\n}\n/**\n * Validate a map of user supplied properties against a map of validators\n * Inject default values when user doesn't supply a property\n * @param properties\n * @param propValidators\n * @returns\n */\nexport function getValidatedProperties(properties, propValidators, errorMessage) {\n const validated = {};\n for (const [key, propsValidator] of Object.entries(propValidators)) {\n if (properties && key in properties && !propsValidator.private) {\n if (propsValidator.validate) {\n assert(propsValidator.validate(properties[key], propsValidator), `${errorMessage}: invalid ${key}`);\n }\n validated[key] = properties[key];\n }\n else {\n // property not supplied - use default value\n validated[key] = propsValidator.value;\n }\n }\n // TODO - warn for unused properties that don't match a validator?\n return validated;\n}\n/**\n * Creates a property validator for a prop type. Either contains:\n * - a valid prop type object ({type, ...})\n * - or just a default value, in which case type and name inference is used\n */\nfunction makePropValidator(propType) {\n let type = getTypeOf(propType);\n if (type !== 'object') {\n return { value: propType, ...DEFAULT_PROP_VALIDATORS[type], type };\n }\n // Special handling for objects\n if (typeof propType === 'object') {\n if (!propType) {\n return { type: 'object', value: null };\n }\n if (propType.type !== undefined) {\n return { ...propType, ...DEFAULT_PROP_VALIDATORS[propType.type], type: propType.type };\n }\n // If no type and value this object is likely the value\n if (propType.value === undefined) {\n return { type: 'object', value: propType };\n }\n type = getTypeOf(propType.value);\n return { ...propType, ...DEFAULT_PROP_VALIDATORS[type], type };\n }\n throw new Error('props');\n}\n/**\n * \"improved\" version of javascript typeof that can distinguish arrays and null values\n */\nfunction getTypeOf(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return 'array';\n }\n return typeof value;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"./lib/glsl-utils/highlight.js\";\nexport const MODULE_INJECTORS_VS = `\\\n#ifdef MODULE_LOGDEPTH\nlogdepth_adjustPosition(gl_Position);\n#endif\n`;\nexport const MODULE_INJECTORS_FS = `\\\n#ifdef MODULE_MATERIAL\ngl_FragColor = material_filterColor(gl_FragColor);\n#endif\n#ifdef MODULE_LIGHTING\ngl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n#ifdef MODULE_FOG\ngl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n#ifdef MODULE_PICKING\ngl_FragColor = picking_filterHighlightColor(gl_FragColor);\ngl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n#ifdef MODULE_LOGDEPTH\nlogdepth_setFragDepth();\n#endif\n`;\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { MODULE_INJECTORS_VS, MODULE_INJECTORS_FS } from \"../../module-injectors.js\";\nimport { assert } from \"../utils/assert.js\";\n// TODO - experimental\nconst MODULE_INJECTORS = {\n vertex: MODULE_INJECTORS_VS,\n fragment: MODULE_INJECTORS_FS\n};\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\nconst REGEX_END_OF_MAIN = /}\\n?[^{}]*$/; // End of main, assumes main is last function\nconst fragments = [];\nexport const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__';\n/**\n *\n */\nexport function normalizeInjections(injections) {\n const result = { vertex: {}, fragment: {} };\n for (const hook in injections) {\n let injection = injections[hook];\n const stage = getHookStage(hook);\n if (typeof injection === 'string') {\n injection = {\n order: 0,\n injection\n };\n }\n result[stage][hook] = injection;\n }\n return result;\n}\nfunction getHookStage(hook) {\n const type = hook.slice(0, 2);\n switch (type) {\n case 'vs':\n return 'vertex';\n case 'fs':\n return 'fragment';\n default:\n throw new Error(type);\n }\n}\n/**\n// A minimal shader injection/templating system.\n// RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/shader-injection-rfc.md\n * @param source\n * @param type\n * @param inject\n * @param injectStandardStubs\n * @returns\n */\n// eslint-disable-next-line complexity\nexport function injectShader(source, stage, inject, injectStandardStubs = false) {\n const isVertex = stage === 'vertex';\n for (const key in inject) {\n const fragmentData = inject[key];\n fragmentData.sort((a, b) => a.order - b.order);\n fragments.length = fragmentData.length;\n for (let i = 0, len = fragmentData.length; i < len; ++i) {\n fragments[i] = fragmentData[i].injection;\n }\n const fragmentString = `${fragments.join('\\n')}\\n`;\n switch (key) {\n // declarations are injected before the main function\n case 'vs:#decl':\n if (isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'vs:#main-start':\n if (isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, (match) => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'vs:#main-end':\n if (isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, (match) => fragmentString + match);\n }\n break;\n // declarations are injected before the main function\n case 'fs:#decl':\n if (!isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'fs:#main-start':\n if (!isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, (match) => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'fs:#main-end':\n if (!isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, (match) => fragmentString + match);\n }\n break;\n default:\n // TODO(Tarek): I think this usage should be deprecated.\n // inject code after key, leaving key in place\n source = source.replace(key, (match) => match + fragmentString);\n }\n }\n // Remove if it hasn't already been replaced\n source = source.replace(DECLARATION_INJECT_MARKER, '');\n // Finally, if requested, insert an automatic module injector chunk\n if (injectStandardStubs) {\n source = source.replace(/\\}\\s*$/, (match) => match + MODULE_INJECTORS[stage]);\n }\n return source;\n}\n// Takes an array of inject objects and combines them into one\nexport function combineInjects(injects) {\n const result = {};\n assert(Array.isArray(injects) && injects.length > 1);\n injects.forEach(inject => {\n for (const key in inject) {\n result[key] = result[key] ? `${result[key]}\\n${inject[key]}` : inject[key];\n }\n });\n return result;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../utils/assert.js\";\nimport { makePropValidators, getValidatedProperties } from \"../filters/prop-types.js\";\nimport { normalizeInjections } from \"../shader-assembly/shader-injections.js\";\nlet index = 1;\n/** An initialized ShaderModule, ready to use with `assembleShaders()` */\nexport class ShaderModuleInstance {\n name;\n vs;\n fs;\n getModuleUniforms;\n dependencies;\n deprecations;\n defines;\n injections;\n uniforms = {};\n uniformTypes = {};\n static instantiateModules(modules) {\n return modules.map((module) => {\n if (module instanceof ShaderModuleInstance) {\n return module;\n }\n assert(typeof module !== 'string', `Shader module use by name is deprecated. Import shader module '${JSON.stringify(module)}' and use it directly.`);\n if (!module.name) {\n // eslint-disable-next-line no-console\n console.warn('shader module has no name');\n module.name = `shader-module-${index++}`;\n }\n const moduleObject = new ShaderModuleInstance(module);\n moduleObject.dependencies = ShaderModuleInstance.instantiateModules(module.dependencies || []);\n return moduleObject;\n });\n }\n constructor(props) {\n const { name, vs, fs, dependencies = [], uniformTypes = {}, uniformPropTypes = {}, getUniforms, deprecations = [], defines = {}, inject = {} } = props;\n assert(typeof name === 'string');\n this.name = name;\n this.vs = vs;\n this.fs = fs;\n this.getModuleUniforms = getUniforms;\n this.dependencies = ShaderModuleInstance.instantiateModules(dependencies);\n this.deprecations = this._parseDeprecationDefinitions(deprecations);\n this.defines = defines;\n this.injections = normalizeInjections(inject);\n this.uniformTypes = uniformTypes;\n if (uniformPropTypes) {\n this.uniforms = makePropValidators(uniformPropTypes);\n }\n }\n // Extracts the source code chunk for the specified shader type from the named shader module\n getModuleSource(stage) {\n let moduleSource;\n switch (stage) {\n case 'vertex':\n moduleSource = this.vs || '';\n break;\n case 'fragment':\n moduleSource = this.fs || '';\n break;\n default:\n assert(false);\n }\n const moduleName = this.name.toUpperCase().replace(/[^0-9a-z]/gi, '_');\n return `\\\n// ----- MODULE ${this.name} ---------------\n\n#define MODULE_${moduleName}\n${moduleSource}\\\n\n\n`;\n }\n getUniforms(userProps, uniforms) {\n if (this.getModuleUniforms) {\n return this.getModuleUniforms(userProps, uniforms);\n }\n // Build uniforms from the uniforms array\n return getValidatedProperties(userProps, this.uniforms, this.name);\n }\n getDefines() {\n return this.defines;\n }\n // Warn about deprecated uniforms or functions\n checkDeprecations(shaderSource, log) {\n this.deprecations.forEach(def => {\n if (def.regex?.test(shaderSource)) {\n if (def.deprecated) {\n log.deprecated(def.old, def.new)();\n }\n else {\n log.removed(def.old, def.new)();\n }\n }\n });\n }\n _parseDeprecationDefinitions(deprecations) {\n deprecations.forEach(def => {\n switch (def.type) {\n case 'function':\n def.regex = new RegExp(`\\\\b${def.old}\\\\(`);\n break;\n default:\n def.regex = new RegExp(`${def.type} ${def.old};`);\n }\n });\n return deprecations;\n }\n _defaultGetUniforms(opts = {}) {\n const uniforms = {};\n const propTypes = this.uniforms;\n for (const key in propTypes) {\n const propDef = propTypes[key];\n if (key in opts && !propDef.private) {\n if (propDef.validate) {\n assert(propDef.validate(opts[key], propDef), `${this.name}: invalid ${key}`);\n }\n uniforms[key] = opts[key];\n }\n else {\n uniforms[key] = propDef.value;\n }\n }\n return uniforms;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Shader selection\n * @param device\n * @param props\n * @returns\n */\nexport function selectShaders(props) {\n // If we have a source field, we have a single unified shader source\n if (props.source && props.platformInfo.type === 'webgpu') {\n const propsCopy = { ...props, vs: undefined, fs: undefined };\n return propsCopy;\n }\n if (!props.vs) {\n throw new Error('no vertex shader');\n }\n // Resolve WGSL vs GLSL\n const vs = getShaderSource(props.platformInfo, props.vs);\n let fs;\n if (props.fs) {\n fs = getShaderSource(props.platformInfo, props.fs);\n }\n return { ...props, vs, fs };\n}\n/** Create a shader from the different overloads */\nfunction getShaderSource(platformInfo, shader) {\n // TODO - detect WGSL/GLSL and throw an error if not supported\n if (typeof shader === 'string') {\n return shader;\n }\n switch (platformInfo.type) {\n case 'webgpu':\n if (shader?.wgsl) {\n return shader.wgsl;\n }\n throw new Error('WebGPU does not support GLSL shaders');\n default:\n if (shader?.glsl) {\n return shader.glsl;\n }\n throw new Error('WebGL does not support WGSL shaders');\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ShaderModuleInstance } from \"../shader-module/shader-module-instance.js\";\n/**\n * Instantiate shader modules and esolve any dependencies\n */\nexport function resolveModules(modules) {\n const instances = ShaderModuleInstance.instantiateModules(modules);\n return getShaderDependencies(instances);\n}\n/**\n * Takes a list of shader module names and returns a new list of\n * shader module names that includes all dependencies, sorted so\n * that modules that are dependencies of other modules come first.\n *\n * If the shader glsl code from the returned modules is concatenated\n * in the reverse order, it is guaranteed that all functions be resolved and\n * that all function and variable definitions come before use.\n *\n * @param modules - Array of modules (inline modules or module names)\n * @return - Array of modules\n */\nfunction getShaderDependencies(modules) {\n const moduleMap = {};\n const moduleDepth = {};\n getDependencyGraph({ modules, level: 0, moduleMap, moduleDepth });\n // Return a reverse sort so that dependencies come before the modules that use them\n return Object.keys(moduleDepth)\n .sort((a, b) => moduleDepth[b] - moduleDepth[a])\n .map(name => moduleMap[name]);\n}\n/**\n * Recursively checks module dependencies to calculate dependency level of each module.\n *\n * @param options.modules - Array of modules\n * @param options.level - Current level\n * @param options.moduleMap -\n * @param options.moduleDepth - Current level\n * @return - Map of module name to its level\n */\n// Adds another level of dependencies to the result map\nexport function getDependencyGraph(options) {\n const { modules, level, moduleMap, moduleDepth } = options;\n if (level >= 5) {\n throw new Error('Possible loop in shader dependency graph');\n }\n // Update level on all current modules\n for (const module of modules) {\n moduleMap[module.name] = module;\n if (moduleDepth[module.name] === undefined || moduleDepth[module.name] < level) {\n moduleDepth[module.name] = level;\n }\n }\n // Recurse\n for (const module of modules) {\n if (module.dependencies) {\n getDependencyGraph({ modules: module.dependencies, level: level + 1, moduleMap, moduleDepth });\n }\n }\n}\nexport const TEST_EXPORTS = {\n getShaderDependencies,\n getDependencyGraph\n};\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// TRANSPILATION TABLES\n/**\n * Transpiles GLSL 3.00 shader source code to target GLSL version (3.00 or 1.00)\n *\n * @note We always run transpiler even if same version e.g. 3.00 => 3.00\n * @note For texture sampling transpilation, apps need to use non-standard texture* calls in GLSL 3.00 source\n * RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/portable-glsl-300-rfc.md\n */\nexport function transpileGLSLShader(source, stage) {\n const sourceGLSLVersion = Number(source.match(/^#version[ \\t]+(\\d+)/m)?.[1] || 100);\n if (sourceGLSLVersion !== 300) {\n // TODO - we splurge on a longer error message to help deck.gl custom layer developers\n throw new Error('luma.gl v9 only supports GLSL 3.00 shader sources');\n }\n switch (stage) {\n case 'vertex':\n source = convertShader(source, ES300_VERTEX_REPLACEMENTS);\n return source;\n case 'fragment':\n source = convertShader(source, ES300_FRAGMENT_REPLACEMENTS);\n return source;\n default:\n // Unknown shader stage\n throw new Error(stage);\n }\n}\n/** Simple regex replacements for GLSL ES 1.00 syntax that has changed in GLSL ES 3.00 */\nconst ES300_REPLACEMENTS = [\n // Fix poorly formatted version directive\n [/^(#version[ \\t]+(100|300[ \\t]+es))?[ \\t]*\\n/, '#version 300 es\\n'],\n // The individual `texture...()` functions were replaced with `texture()` overloads\n [/\\btexture(2D|2DProj|Cube)Lod(EXT)?\\(/g, 'textureLod('],\n [/\\btexture(2D|2DProj|Cube)(EXT)?\\(/g, 'texture(']\n];\nconst ES300_VERTEX_REPLACEMENTS = [\n ...ES300_REPLACEMENTS,\n // `attribute` keyword replaced with `in`\n [makeVariableTextRegExp('attribute'), 'in $1'],\n // `varying` keyword replaced with `out`\n [makeVariableTextRegExp('varying'), 'out $1']\n];\n/** Simple regex replacements for GLSL ES 1.00 syntax that has changed in GLSL ES 3.00 */\nconst ES300_FRAGMENT_REPLACEMENTS = [\n ...ES300_REPLACEMENTS,\n // `varying` keyword replaced with `in`\n [makeVariableTextRegExp('varying'), 'in $1']\n];\nfunction convertShader(source, replacements) {\n for (const [pattern, replacement] of replacements) {\n source = source.replace(pattern, replacement);\n }\n return source;\n}\n/**\n * Creates a regexp that tests for a specific variable type\n * @example\n * should match:\n * in float weight;\n * out vec4 positions[2];\n * should not match:\n * void f(out float a, in float b) {}\n */\nfunction makeVariableTextRegExp(qualifier) {\n return new RegExp(`\\\\b${qualifier}[ \\\\t]+(\\\\w+[ \\\\t]+\\\\w+(\\\\[\\\\w+\\\\])?;)`, 'g');\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Generate hook source code */\nexport function getShaderHooks(hookFunctions, hookInjections) {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a, b) => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n return result;\n}\n/**\n * Parse string based hook functions\n * And split per shader\n */\nexport function normalizeShaderHooks(hookFunctions) {\n const result = { vertex: {}, fragment: {} };\n for (const hookFunction of hookFunctions) {\n let opts;\n let hook;\n if (typeof hookFunction !== 'string') {\n opts = hookFunction;\n hook = opts.hook;\n }\n else {\n opts = {};\n hook = hookFunction;\n }\n hook = hook.trim();\n const [shaderStage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n const normalizedHook = Object.assign(opts, { signature });\n switch (shaderStage) {\n case 'vs':\n result.vertex[name] = normalizedHook;\n break;\n case 'fs':\n result.fragment[name] = normalizedHook;\n break;\n default:\n throw new Error(shaderStage);\n }\n }\n return result;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Extracts information from shader source code */\nexport function getShaderInfo(source, defaultName) {\n return {\n name: getShaderName(source, defaultName),\n language: 'glsl',\n version: getShaderVersion(source)\n };\n}\n/** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */\nfunction getShaderName(shader, defaultName = 'unnamed') {\n const SHADER_NAME_REGEXP = /#define[^\\S\\r\\n]*SHADER_NAME[^\\S\\r\\n]*([A-Za-z0-9_-]+)\\s*/;\n const match = SHADER_NAME_REGEXP.exec(shader);\n return match ? match[1] : defaultName;\n}\n/** returns GLSL shader version of given shader string */\nfunction getShaderVersion(source) {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n if (words && words.length >= 2 && words[0] === '#version') {\n const parsedVersion = parseInt(words[1], 10);\n if (Number.isFinite(parsedVersion)) {\n version = parsedVersion;\n }\n }\n if (version !== 100 && version !== 300) {\n throw new Error(`Invalid GLSL version ${version}`);\n }\n return version;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"../glsl-utils/highlight.js\";\nimport { resolveModules } from \"./resolve-modules.js\";\nimport { getPlatformShaderDefines } from \"./platform-defines.js\";\nimport { injectShader, DECLARATION_INJECT_MARKER } from \"./shader-injections.js\";\nimport { transpileGLSLShader } from \"../shader-transpiler/transpile-glsl-shader.js\";\nimport { normalizeShaderHooks, getShaderHooks } from \"./shader-hooks.js\";\nimport { assert } from \"../utils/assert.js\";\nimport { getShaderInfo } from \"../glsl-utils/get-shader-info.js\";\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n`;\n/**\n * Precision prologue to inject before functions are injected in shader\n * TODO - extract any existing prologue in the fragment source and move it up...\n */\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n`;\n/**\n * Inject a list of shader modules into a single shader source for WGSL\n */\nexport function assembleShaderWGSL(options) {\n const modules = resolveModules(options.modules || []);\n return {\n source: assembleWGSLShader(options.platformInfo, {\n ...options,\n source: options.source,\n stage: 'vertex',\n modules\n }),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n/**\n * Injects dependent shader module sources into pair of main vertex/fragment shader sources for WGSL\n */\nexport function assembleShaderPairWGSL(options) {\n const modules = resolveModules(options.modules || []);\n return {\n vs: assembleWGSLShader(options.platformInfo, {\n ...options,\n source: options.vs,\n stage: 'vertex',\n modules\n }),\n fs: assembleWGSLShader(options.platformInfo, {\n ...options,\n source: options.fs,\n stage: 'fragment',\n modules\n }),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n/**\n * Injects dependent shader module sources into pair of main vertex/fragment shader sources for GLSL\n */\nexport function assembleShaderPairGLSL(options) {\n const { vs, fs } = options;\n const modules = resolveModules(options.modules || []);\n return {\n vs: assembleGLSLShader(options.platformInfo, {\n ...options,\n source: vs,\n stage: 'vertex',\n modules\n }),\n fs: assembleGLSLShader(options.platformInfo, {\n ...options,\n source: fs,\n stage: 'fragment',\n modules\n }),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n/**\n * Pulls together complete source code for either a vertex or a fragment shader\n * adding prologues, requested module chunks, and any final injections.\n * @param gl\n * @param options\n * @returns\n */\nexport function assembleWGSLShader(platformInfo, options) {\n const { \n // id,\n source, stage, modules, \n // defines = {},\n hookFunctions = [], inject = {}, log } = options;\n assert(typeof source === 'string', 'shader source must be a string');\n // const isVertex = type === 'vs';\n // const sourceLines = source.split('\\n');\n const coreSource = source;\n // Combine Module and Application Defines\n // const allDefines = {};\n // modules.forEach(module => {\n // Object.assign(allDefines, module.getDefines());\n // });\n // Object.assign(allDefines, defines);\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = '';\n // prologue\n // ? `\\\n // ${getShaderNameDefine({id, source, type})}\n // ${getShaderType(type)}\n // ${getPlatformShaderDefines(platformInfo)}\n // ${getApplicationDefines(allDefines)}\n // ${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n // `\n // `;\n const hookFunctionMap = normalizeShaderHooks(hookFunctions);\n // Add source of dependent modules in resolved order\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n for (const key in inject) {\n const injection = typeof inject[key] === 'string' ? { injection: inject[key], order: 0 } : inject[key];\n const match = /^(v|f)s:(#)?([\\w-]+)$/.exec(key);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n }\n else {\n mainInjections[key] = [injection];\n }\n }\n else {\n hookInjections[key] = [injection];\n }\n }\n else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n // TODO - hack until shadertool modules support WebGPU\n const modulesToInject = platformInfo.type !== 'webgpu' ? modules : [];\n for (const module of modulesToInject) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(stage, 'wgsl');\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n const injections = module.injections[stage];\n for (const key in injections) {\n const match = /^(v|f)s:#([\\w-]+)$/.exec(key);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n }\n else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n assembledSource = injectShader(assembledSource, stage, declInjections);\n assembledSource += getShaderHooks(hookFunctionMap[stage], hookInjections);\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, stage, mainInjections);\n return assembledSource;\n}\n/**\n * Pulls together complete source code for either a vertex or a fragment shader\n * adding prologues, requested module chunks, and any final injections.\n * @param gl\n * @param options\n * @returns\n */\nfunction assembleGLSLShader(platformInfo, options) {\n const { id, source, stage, language = 'glsl', modules, defines = {}, hookFunctions = [], inject = {}, prologue = true, log } = options;\n assert(typeof source === 'string', 'shader source must be a string');\n const sourceVersion = language === 'glsl' ? getShaderInfo(source).version : -1;\n const targetVersion = platformInfo.shaderLanguageVersion;\n const sourceVersionDirective = sourceVersion === 100 ? '#version 100' : '#version 300 es';\n const sourceLines = source.split('\\n');\n // TODO : keep all pre-processor statements at the beginning of the shader.\n const coreSource = sourceLines.slice(1).join('\\n');\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach(module => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = '';\n switch (language) {\n case 'wgsl':\n break;\n case 'glsl':\n assembledSource = prologue\n ? `\\\n${sourceVersionDirective}\n\n// ----- PROLOGUE -------------------------\n${getShaderNameDefine({ id, source, stage })}\n${`#define SHADER_TYPE_${stage.toUpperCase()}`}\n${getPlatformShaderDefines(platformInfo)}\n${stage === 'fragment' ? FRAGMENT_SHADER_PROLOGUE : ''}\n\n// ----- APPLICATION DEFINES -------------------------\n\n${getApplicationDefines(allDefines)}\n\n`\n : `${sourceVersionDirective}\n`;\n break;\n }\n const hookFunctionMap = normalizeShaderHooks(hookFunctions);\n // Add source of dependent modules in resolved order\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n for (const key in inject) {\n // @ts-expect-error\n const injection = typeof inject[key] === 'string' ? { injection: inject[key], order: 0 } : inject[key];\n const match = /^(v|f)s:(#)?([\\w-]+)$/.exec(key);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n }\n else {\n mainInjections[key] = [injection];\n }\n }\n else {\n hookInjections[key] = [injection];\n }\n }\n else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(stage);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n const injections = module.injections[stage];\n for (const key in injections) {\n const match = /^(v|f)s:#([\\w-]+)$/.exec(key);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n }\n else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n assembledSource += '// ----- MAIN SHADER SOURCE -------------------------';\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n assembledSource = injectShader(assembledSource, stage, declInjections);\n assembledSource += getShaderHooks(hookFunctionMap[stage], hookInjections);\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, stage, mainInjections);\n if (language === 'glsl' && sourceVersion !== targetVersion) {\n assembledSource = transpileGLSLShader(assembledSource, stage);\n }\n return assembledSource.trim();\n}\n/**\n * Returns a combined `getUniforms` covering the options for all the modules,\n * the created function will pass on options to the inidividual `getUniforms`\n * function of each shader module and combine the results into one object that\n * can be passed to setUniforms.\n * @param modules\n * @returns\n */\nexport function assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n/**\n * Generate \"glslify-compatible\" SHADER_NAME defines\n * These are understood by the GLSL error parsing function\n * If id is provided and no SHADER_NAME constant is present in source, create one\n */\nfunction getShaderNameDefine(options) {\n const { id, source, stage } = options;\n const injectShaderName = id && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${stage}\n\n`\n : '';\n}\n/** Generates application defines from an object of key value pairs */\nfunction getApplicationDefines(defines = {}) {\n let sourceText = '';\n for (const define in defines) {\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n return sourceText;\n}\n/*\nfunction getHookFunctions(\n hookFunctions: Record,\n hookInjections: Record\n): string {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a: {order: number}, b: {order: number}): number => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions: (string | HookFunction)[]): {\n vs: Record;\n fs: Record;\n} {\n const result: {vs: Record; fs: Record} = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach((hookFunction: string | HookFunction) => {\n let opts: HookFunction;\n let hook: string;\n if (typeof hookFunction !== 'string') {\n opts = hookFunction;\n hook = opts.hook;\n } else {\n opts = {} as HookFunction;\n hook = hookFunction;\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n if (stage !== 'vs' && stage !== 'fs') {\n throw new Error(stage);\n }\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n*/\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"../glsl-utils/highlight.js\";\n/** Adds defines to help identify GPU architecture / platform */\nexport function getPlatformShaderDefines(platformInfo) {\n switch (platformInfo?.gpu.toLowerCase()) {\n case 'apple':\n return `\\\n#define APPLE_GPU\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n case 'nvidia':\n return `\\\n#define NVIDIA_GPU\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n`;\n case 'intel':\n return `\\\n#define INTEL_GPU\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n case 'amd':\n // AMD Does not eliminate fp64 code\n return `\\\n#define AMD_GPU\n`;\n default:\n // We don't know what GPU it is, could be that the GPU driver or\n // browser is not implementing UNMASKED_RENDERER constant and not\n // reporting a correct name\n return `\\\n#define DEFAULT_GPU\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ShaderModuleInstance } from \"./shader-module/shader-module-instance.js\";\nimport { selectShaders } from \"./shader-assembly/select-shaders.js\";\nimport { assembleShaderWGSL, assembleShaderPairWGSL, assembleShaderPairGLSL } from \"./shader-assembly/assemble-shaders.js\";\n/**\n * A stateful version of `assembleShaders` that can be used to assemble shaders.\n * Supports setting of default modules and hooks.\n */\nexport class ShaderAssembler {\n /** Default ShaderAssembler instance */\n static defaultShaderAssembler;\n /** Hook functions */\n _hookFunctions = [];\n /** Shader modules */\n _defaultModules = [];\n /**\n * A default shader assembler instance - the natural place to register default modules and hooks\n * @returns\n */\n static getDefaultShaderAssembler() {\n ShaderAssembler.defaultShaderAssembler =\n ShaderAssembler.defaultShaderAssembler || new ShaderAssembler();\n return ShaderAssembler.defaultShaderAssembler;\n }\n /**\n * Add a default module that does not have to be provided with every call to assembleShaders()\n */\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === (typeof module === 'string' ? module : module.name))) {\n this._defaultModules.push(module);\n }\n }\n /**\n * Remove a default module\n */\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n }\n /**\n * Register a shader hook\n * @param hook\n * @param opts\n */\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, { hook });\n }\n this._hookFunctions.push(hook);\n }\n /**\n * Assemble a pair of shaders into a single shader program\n * @param platformInfo\n * @param props\n * @returns\n */\n assembleShader(props) {\n const modules = this._getModuleList(props.modules); // Combine with default modules\n const hookFunctions = this._hookFunctions; // TODO - combine with default hook functions\n const options = selectShaders(props);\n const assembled = assembleShaderWGSL({\n platformInfo: props.platformInfo,\n ...options,\n modules,\n hookFunctions\n });\n return { ...assembled, modules };\n }\n /**\n * Assemble a pair of shaders into a single shader program\n * @param platformInfo\n * @param props\n * @returns\n */\n assembleShaderPair(props) {\n const options = selectShaders(props);\n const modules = this._getModuleList(props.modules); // Combine with default modules\n const hookFunctions = this._hookFunctions; // TODO - combine with default hook functions\n const { platformInfo } = props;\n const isWGSL = props.platformInfo.shaderLanguage === 'wgsl';\n const assembled = isWGSL\n ? assembleShaderPairWGSL({ platformInfo, ...options, modules, hookFunctions })\n : assembleShaderPairGLSL({ platformInfo, ...options, modules, hookFunctions });\n return { ...assembled, modules };\n }\n /**\n * Dedupe and combine with default modules\n */\n _getModuleList(appModules = []) {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\n let count = 0;\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n modules.length = count;\n return ShaderModuleInstance.instantiateModules(modules);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"../../../lib/glsl-utils/highlight.js\";\n// import {ShaderModule} from '../../types';\nconst fp32shader = `\\\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01;\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03;\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04;\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06;\nfloat sin_taylor_fp32(float a) {\nfloat r, s, t, x;\nif (a == 0.0) {\nreturn 0.0;\n}\nx = -a * a;\ns = a;\nr = a;\nr = r * x;\nt = r * INVERSE_FACTORIAL_3;\ns = s + t;\nr = r * x;\nt = r * INVERSE_FACTORIAL_5;\ns = s + t;\nr = r * x;\nt = r * INVERSE_FACTORIAL_7;\ns = s + t;\nr = r * x;\nt = r * INVERSE_FACTORIAL_9;\ns = s + t;\nreturn s;\n}\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\nif (a == 0.0) {\nsin_t = 0.0;\ncos_t = 1.0;\n}\nsin_t = sin_taylor_fp32(a);\ncos_t = sqrt(1.0 - sin_t * sin_t);\n}\nfloat tan_taylor_fp32(float a) {\nfloat sin_a;\nfloat cos_a;\nif (a == 0.0) {\nreturn 0.0;\n}\nfloat z = floor(a / TWO_PI);\nfloat r = a - TWO_PI * z;\nfloat t;\nfloat q = floor(r / PI_2 + 0.5);\nint j = int(q);\nif (j < -2 || j > 2) {\nreturn 1.0 / 0.0;\n}\nt = r - PI_2 * q;\nq = floor(t / PI_16 + 0.5);\nint k = int(q);\nint abs_k = int(abs(float(k)));\nif (abs_k > 4) {\nreturn 1.0 / 0.0;\n} else {\nt = t - PI_16 * q;\n}\nfloat u = 0.0;\nfloat v = 0.0;\nfloat sin_t, cos_t;\nfloat s, c;\nsincos_taylor_fp32(t, sin_t, cos_t);\nif (k == 0) {\ns = sin_t;\nc = cos_t;\n} else {\nif (abs(float(abs_k) - 1.0) < 0.5) {\nu = COS_TABLE_0;\nv = SIN_TABLE_0;\n} else if (abs(float(abs_k) - 2.0) < 0.5) {\nu = COS_TABLE_1;\nv = SIN_TABLE_1;\n} else if (abs(float(abs_k) - 3.0) < 0.5) {\nu = COS_TABLE_2;\nv = SIN_TABLE_2;\n} else if (abs(float(abs_k) - 4.0) < 0.5) {\nu = COS_TABLE_3;\nv = SIN_TABLE_3;\n}\nif (k > 0) {\ns = u * sin_t + v * cos_t;\nc = u * cos_t - v * sin_t;\n} else {\ns = u * sin_t - v * cos_t;\nc = u * cos_t + v * sin_t;\n}\n}\nif (j == 0) {\nsin_a = s;\ncos_a = c;\n} else if (j == 1) {\nsin_a = c;\ncos_a = -s;\n} else if (j == -1) {\nsin_a = -c;\ncos_a = s;\n} else {\nsin_a = -s;\ncos_a = -c;\n}\nreturn sin_a / cos_a;\n}\n#endif\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nreturn tan_taylor_fp32(a);\n#else\nreturn tan(a);\n#endif\n}\n`;\n/**\n * 32 bit math library (fixups for GPUs)\n */\nexport const fp32 = {\n name: 'fp32',\n vs: fp32shader\n};\n","const defines = '#define SMOOTH_EDGE_RADIUS 0.5';\nconst vs = `\n${defines}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`;\nconst fs = `\n${defines}\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`;\nexport default { name: 'geometry', vs, fs };\n","// based on https://github.com/cheton/is-electron\n// https://github.com/electron/electron/issues/2288\n/* eslint-disable complexity */\nexport function isElectron(mockUserAgent) {\n // Renderer process\n // @ts-expect-error\n if (typeof window !== 'undefined' && window.process?.type === 'renderer') {\n return true;\n }\n // Main process\n // eslint-disable-next-line\n if (typeof process !== 'undefined' && Boolean(process.versions?.['electron'])) {\n return true;\n }\n // Detect the user agent when the `nodeIntegration` option is set to true\n const realUserAgent = typeof navigator !== 'undefined' && navigator.userAgent;\n const userAgent = mockUserAgent || realUserAgent;\n return Boolean(userAgent && userAgent.indexOf('Electron') >= 0);\n}\n","// This function is needed in initialization stages,\n// make sure it can be imported in isolation\nimport { isElectron } from \"./is-electron.js\";\n/** Check if in browser by duck-typing Node context */\nexport function isBrowser() {\n const isNode = \n // @ts-expect-error\n typeof process === 'object' && String(process) === '[object process]' && !process?.browser;\n return !isNode || isElectron();\n}\n","// Extract injected version from package.json (injected by babel plugin)\n// @ts-expect-error\nexport const VERSION = typeof \"4.0.7\" !== 'undefined' ? \"4.0.7\" : 'untranspiled source';\n// ENVIRONMENT\nexport { self, window, global, document, process, console } from \"./lib/globals.js\";\nexport { isBrowser } from \"./lib/is-browser.js\";\nexport { getBrowser, isMobile } from \"./lib/get-browser.js\";\nexport { isElectron } from \"./lib/is-electron.js\";\n// ENVIRONMENT'S ASSERT IS 5-15KB, SO WE PROVIDE OUR OWN\nexport { assert } from \"./utils/assert.js\";\n// TODO - wish we could just export a constant\n// export const isBrowser = checkIfBrowser();\n","// probe.gl, MIT license\nfunction getStorage(type) {\n try {\n const storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return storage;\n }\n catch (e) {\n return null;\n }\n}\n// Store keys in local storage via simple interface\nexport class LocalStorage {\n constructor(id, defaultConfig, type = 'sessionStorage') {\n this.storage = getStorage(type);\n this.id = id;\n this.config = defaultConfig;\n this._loadConfiguration();\n }\n getConfiguration() {\n return this.config;\n }\n setConfiguration(configuration) {\n Object.assign(this.config, configuration);\n if (this.storage) {\n const serialized = JSON.stringify(this.config);\n this.storage.setItem(this.id, serialized);\n }\n }\n // Get config from persistent store, if available\n _loadConfiguration() {\n let configuration = {};\n if (this.storage) {\n const serializedConfiguration = this.storage.getItem(this.id);\n configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n }\n Object.assign(this.config, configuration);\n return this;\n }\n}\n","import { isBrowser } from '@probe.gl/env';\nexport var COLOR;\n(function (COLOR) {\n COLOR[COLOR[\"BLACK\"] = 30] = \"BLACK\";\n COLOR[COLOR[\"RED\"] = 31] = \"RED\";\n COLOR[COLOR[\"GREEN\"] = 32] = \"GREEN\";\n COLOR[COLOR[\"YELLOW\"] = 33] = \"YELLOW\";\n COLOR[COLOR[\"BLUE\"] = 34] = \"BLUE\";\n COLOR[COLOR[\"MAGENTA\"] = 35] = \"MAGENTA\";\n COLOR[COLOR[\"CYAN\"] = 36] = \"CYAN\";\n COLOR[COLOR[\"WHITE\"] = 37] = \"WHITE\";\n COLOR[COLOR[\"BRIGHT_BLACK\"] = 90] = \"BRIGHT_BLACK\";\n COLOR[COLOR[\"BRIGHT_RED\"] = 91] = \"BRIGHT_RED\";\n COLOR[COLOR[\"BRIGHT_GREEN\"] = 92] = \"BRIGHT_GREEN\";\n COLOR[COLOR[\"BRIGHT_YELLOW\"] = 93] = \"BRIGHT_YELLOW\";\n COLOR[COLOR[\"BRIGHT_BLUE\"] = 94] = \"BRIGHT_BLUE\";\n COLOR[COLOR[\"BRIGHT_MAGENTA\"] = 95] = \"BRIGHT_MAGENTA\";\n COLOR[COLOR[\"BRIGHT_CYAN\"] = 96] = \"BRIGHT_CYAN\";\n COLOR[COLOR[\"BRIGHT_WHITE\"] = 97] = \"BRIGHT_WHITE\";\n})(COLOR || (COLOR = {}));\nconst BACKGROUND_INCREMENT = 10;\nfunction getColor(color) {\n if (typeof color !== 'string') {\n return color;\n }\n color = color.toUpperCase();\n return COLOR[color] || COLOR.WHITE;\n}\nexport function addColor(string, color, background) {\n if (!isBrowser && typeof string === 'string') {\n if (color) {\n const colorCode = getColor(color);\n string = `\\u001b[${colorCode}m${string}\\u001b[39m`;\n }\n if (background) {\n // background colors values are +10\n const colorCode = getColor(background);\n string = `\\u001b[${colorCode + BACKGROUND_INCREMENT}m${string}\\u001b[49m`;\n }\n }\n return string;\n}\n","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n","// Do not name these variables the same as the global objects - will break bundling\nconst global_ = globalThis;\nconst window_ = globalThis;\nconst document_ = globalThis.document || {};\nconst process_ = globalThis.process || {};\nconst console_ = globalThis.console;\nconst navigator_ = globalThis.navigator || {};\nexport { global_ as global, global_ as self, window_ as window, document_ as document, process_ as process, console_ as console, navigator_ as navigator };\n","// probe.gl, MIT license\nimport { window, process, isBrowser } from '@probe.gl/env';\n/** Get best timer available. */\nexport function getHiResTimestamp() {\n let timestamp;\n if (isBrowser() && window.performance) {\n timestamp = window?.performance?.now?.();\n }\n else if ('hrtime' in process) {\n // @ts-ignore\n const timeParts = process?.hrtime?.();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n }\n else {\n timestamp = Date.now();\n }\n return timestamp;\n}\n","// probe.gl, MIT license\n/* eslint-disable no-console */\nimport { VERSION, isBrowser } from '@probe.gl/env';\nimport { LocalStorage } from \"./utils/local-storage.js\";\nimport { formatTime, leftPad } from \"./utils/formatters.js\";\nimport { addColor } from \"./utils/color.js\";\nimport { autobind } from \"./utils/autobind.js\";\nimport assert from \"./utils/assert.js\";\nimport { getHiResTimestamp } from \"./utils/hi-res-timestamp.js\";\n// Instrumentation in other packages may override console methods, so preserve them here\nconst originalConsole = {\n debug: isBrowser() ? console.debug || console.log : console.log,\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error\n};\nconst DEFAULT_LOG_CONFIGURATION = {\n enabled: true,\n level: 0\n};\nfunction noop() { } // eslint-disable-line @typescript-eslint/no-empty-function\nconst cache = {};\nconst ONCE = { once: true };\n/** A console wrapper */\nexport class Log {\n constructor({ id } = { id: '' }) {\n this.VERSION = VERSION;\n this._startTs = getHiResTimestamp();\n this._deltaTs = getHiResTimestamp();\n this.userData = {};\n // TODO - fix support from throttling groups\n this.LOG_THROTTLE_TIMEOUT = 0; // Time before throttled messages are logged again\n this.id = id;\n this.userData = {};\n this._storage = new LocalStorage(`__probe-${this.id}__`, DEFAULT_LOG_CONFIGURATION);\n this.timeStamp(`${this.id} started`);\n autobind(this);\n Object.seal(this);\n }\n set level(newLevel) {\n this.setLevel(newLevel);\n }\n get level() {\n return this.getLevel();\n }\n isEnabled() {\n return this._storage.config.enabled;\n }\n getLevel() {\n return this._storage.config.level;\n }\n /** @return milliseconds, with fractions */\n getTotal() {\n return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n }\n /** @return milliseconds, with fractions */\n getDelta() {\n return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n }\n /** @deprecated use logLevel */\n set priority(newPriority) {\n this.level = newPriority;\n }\n /** @deprecated use logLevel */\n get priority() {\n return this.level;\n }\n /** @deprecated use logLevel */\n getPriority() {\n return this.level;\n }\n // Configure\n enable(enabled = true) {\n this._storage.setConfiguration({ enabled });\n return this;\n }\n setLevel(level) {\n this._storage.setConfiguration({ level });\n return this;\n }\n /** return the current status of the setting */\n get(setting) {\n return this._storage.config[setting];\n }\n // update the status of the setting\n set(setting, value) {\n this._storage.setConfiguration({ [setting]: value });\n }\n /** Logs the current settings as a table */\n settings() {\n if (console.table) {\n console.table(this._storage.config);\n }\n else {\n console.log(this._storage.config);\n }\n }\n // Unconditional logging\n assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n }\n warn(message) {\n return this._getLogFunction(0, message, originalConsole.warn, arguments, ONCE);\n }\n error(message) {\n return this._getLogFunction(0, message, originalConsole.error, arguments);\n }\n /** Print a deprecation warning */\n deprecated(oldUsage, newUsage) {\n return this.warn(`\\`${oldUsage}\\` is deprecated and will be removed \\\nin a later version. Use \\`${newUsage}\\` instead`);\n }\n /** Print a removal warning */\n removed(oldUsage, newUsage) {\n return this.error(`\\`${oldUsage}\\` has been removed. Use \\`${newUsage}\\` instead`);\n }\n probe(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.log, arguments, {\n time: true,\n once: true\n });\n }\n log(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.debug, arguments);\n }\n info(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.info, arguments);\n }\n once(logLevel, message) {\n return this._getLogFunction(logLevel, message, originalConsole.debug || originalConsole.info, arguments, ONCE);\n }\n /** Logs an object as a table */\n table(logLevel, table, columns) {\n if (table) {\n return this._getLogFunction(logLevel, table, console.table || noop, (columns && [columns]), {\n tag: getTableHeader(table)\n });\n }\n return noop;\n }\n time(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.time ? console.time : console.info);\n }\n timeEnd(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeEnd ? console.timeEnd : console.info);\n }\n timeStamp(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.timeStamp || noop);\n }\n group(logLevel, message, opts = { collapsed: false }) {\n const options = normalizeArguments({ logLevel, message, opts });\n const { collapsed } = opts;\n // @ts-expect-error\n options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;\n return this._getLogFunction(options);\n }\n groupCollapsed(logLevel, message, opts = {}) {\n return this.group(logLevel, message, Object.assign({}, opts, { collapsed: true }));\n }\n groupEnd(logLevel) {\n return this._getLogFunction(logLevel, '', console.groupEnd || noop);\n }\n // EXPERIMENTAL\n withGroup(logLevel, message, func) {\n this.group(logLevel, message)();\n try {\n func();\n }\n finally {\n this.groupEnd(logLevel)();\n }\n }\n trace() {\n if (console.trace) {\n console.trace();\n }\n }\n // PRIVATE METHODS\n /** Deduces log level from a variety of arguments */\n _shouldLog(logLevel) {\n return this.isEnabled() && this.getLevel() >= normalizeLogLevel(logLevel);\n }\n _getLogFunction(logLevel, message, method, args, opts) {\n if (this._shouldLog(logLevel)) {\n // normalized opts + timings\n opts = normalizeArguments({ logLevel, message, args, opts });\n method = method || opts.method;\n assert(method);\n opts.total = this.getTotal();\n opts.delta = this.getDelta();\n // reset delta timer\n this._deltaTs = getHiResTimestamp();\n const tag = opts.tag || opts.message;\n if (opts.once && tag) {\n if (!cache[tag]) {\n cache[tag] = getHiResTimestamp();\n }\n else {\n return noop;\n }\n }\n // TODO - Make throttling work with groups\n // if (opts.nothrottle || !throttle(tag, this.LOG_THROTTLE_TIMEOUT)) {\n // return noop;\n // }\n message = decorateMessage(this.id, opts.message, opts);\n // Bind console function so that it can be called after being returned\n return method.bind(console, message, ...opts.args);\n }\n return noop;\n }\n}\nLog.VERSION = VERSION;\n/**\n * Get logLevel from first argument:\n * - log(logLevel, message, args) => logLevel\n * - log(message, args) => 0\n * - log({logLevel, ...}, message, args) => logLevel\n * - log({logLevel, message, args}) => logLevel\n */\nfunction normalizeLogLevel(logLevel) {\n if (!logLevel) {\n return 0;\n }\n let resolvedLevel;\n switch (typeof logLevel) {\n case 'number':\n resolvedLevel = logLevel;\n break;\n case 'object':\n // Backward compatibility\n // TODO - deprecate `priority`\n // @ts-expect-error\n resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n break;\n default:\n return 0;\n }\n // 'log level must be a number'\n assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n return resolvedLevel;\n}\n/**\n * \"Normalizes\" the various argument patterns into an object with known types\n * - log(logLevel, message, args) => {logLevel, message, args}\n * - log(message, args) => {logLevel: 0, message, args}\n * - log({logLevel, ...}, message, args) => {logLevel, message, args}\n * - log({logLevel, message, args}) => {logLevel, message, args}\n */\nexport function normalizeArguments(opts) {\n const { logLevel, message } = opts;\n opts.logLevel = normalizeLogLevel(logLevel);\n // We use `arguments` instead of rest parameters (...args) because IE\n // does not support the syntax. Rest parameters is transpiled to code with\n // perf impact. Doing it here instead avoids constructing args when logging is\n // disabled.\n // TODO - remove when/if IE support is dropped\n const args = opts.args ? Array.from(opts.args) : [];\n // args should only contain arguments that appear after `message`\n // eslint-disable-next-line no-empty\n while (args.length && args.shift() !== message) { }\n switch (typeof logLevel) {\n case 'string':\n case 'function':\n if (message !== undefined) {\n args.unshift(message);\n }\n opts.message = logLevel;\n break;\n case 'object':\n Object.assign(opts, logLevel);\n break;\n default:\n }\n // Resolve functions into strings by calling them\n if (typeof opts.message === 'function') {\n opts.message = opts.message();\n }\n const messageType = typeof opts.message;\n // 'log message must be a string' or object\n assert(messageType === 'string' || messageType === 'object');\n // original opts + normalized opts + opts arg + fixed up message\n return Object.assign(opts, { args }, opts.opts);\n}\nfunction decorateMessage(id, message, opts) {\n if (typeof message === 'string') {\n const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n message = opts.time ? `${id}: ${time} ${message}` : `${id}: ${message}`;\n message = addColor(message, opts.color, opts.background);\n }\n return message;\n}\nfunction getTableHeader(table) {\n for (const key in table) {\n for (const title in table[key]) {\n return title || 'untitled';\n }\n }\n return 'empty';\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/**\n * Binds the \"this\" argument of all functions on a class instance to the instance\n * @param obj - class instance (typically a react component)\n */\nexport function autobind(obj, predefined = ['constructor']) {\n const proto = Object.getPrototypeOf(obj);\n const propNames = Object.getOwnPropertyNames(proto);\n const object = obj;\n for (const key of propNames) {\n const value = object[key];\n if (typeof value === 'function') {\n if (!predefined.find(name => key === name)) {\n object[key] = value.bind(obj);\n }\n }\n }\n}\n","// probe.gl, MIT license\n/**\n * Format time\n */\nexport function formatTime(ms) {\n let formatted;\n if (ms < 10) {\n formatted = `${ms.toFixed(2)}ms`;\n }\n else if (ms < 100) {\n formatted = `${ms.toFixed(1)}ms`;\n }\n else if (ms < 1000) {\n formatted = `${ms.toFixed(0)}ms`;\n }\n else {\n formatted = `${(ms / 1000).toFixed(2)}s`;\n }\n return formatted;\n}\nexport function leftPad(string, length = 8) {\n const padLength = Math.max(length - string.length, 0);\n return `${' '.repeat(padLength)}${string}`;\n}\nexport function rightPad(string, length = 8) {\n const padLength = Math.max(length - string.length, 0);\n return `${string}${' '.repeat(padLength)}`;\n}\nexport function formatValue(v, options = {}) {\n const EPSILON = 1e-16;\n const { isInteger = false } = options;\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, options);\n }\n if (!Number.isFinite(v)) {\n return String(v);\n }\n // @ts-expect-error\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n if (isInteger) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n/** Helper to formatValue */\nfunction formatArrayValue(v, options) {\n const { maxElts = 16, size = 1 } = options;\n let string = '[';\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += `,${i % size === 0 ? ' ' : ''}`;\n }\n string += formatValue(v[i], options);\n }\n const terminator = v.length > maxElts ? '...' : ']';\n return `${string}${terminator}`;\n}\n","import { Log } from '@probe.gl/log';\nconst defaultLogger = new Log({ id: 'deck' });\nexport default defaultLogger;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n// Note: The numeric values here are matched by shader code in the\n// \"project\" and \"project64\" shader modules. Both places need to be\n// updated.\nimport log from \"../utils/log.js\";\n/**\n * The coordinate system that positions/dimensions are defined in.\n */\nexport const COORDINATE_SYSTEM = {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT: -1,\n /**\n * Positions are interpreted as [longitude, latitude, elevation]\n * longitude/latitude are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT: 1,\n /**\n * Positions are interpreted as [x, y, z] in meter offsets from the coordinate origin.\n * Dimensions are in meters.\n */\n METER_OFFSETS: 2,\n /**\n * Positions are interpreted as [deltaLng, deltaLat, elevation] from the coordinate origin.\n * deltaLng/deltaLat are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT_OFFSETS: 3,\n /**\n * Positions and dimensions are in the common units of the viewport.\n */\n CARTESIAN: 0\n};\n// Deprecated\n/* eslint-disable accessor-pairs */\nObject.defineProperty(COORDINATE_SYSTEM, 'IDENTITY', {\n get: () => {\n log.deprecated('COORDINATE_SYSTEM.IDENTITY', 'COORDINATE_SYSTEM.CARTESIAN')();\n return 0;\n }\n});\n/* eslint-enable accessor-pairs */\n/**\n * How coordinates are transformed from the world space into the common space.\n */\nexport const PROJECTION_MODE = {\n /**\n * Render geospatial data in Web Mercator projection\n */\n WEB_MERCATOR: 1,\n /**\n * Render geospatial data as a 3D globe\n */\n GLOBE: 2,\n /**\n * (Internal use only) Web Mercator projection at high zoom\n */\n WEB_MERCATOR_AUTO_OFFSET: 4,\n /**\n * No transformation\n */\n IDENTITY: 0\n};\nexport const UNIT = {\n common: 0,\n meters: 1,\n pixels: 2\n};\nexport const EVENTS = {\n click: { handler: 'onClick' },\n panstart: { handler: 'onDragStart' },\n panmove: { handler: 'onDrag' },\n panend: { handler: 'onDragEnd' }\n};\n/**\n * @deprecated Use string constants directly\n */\nexport const OPERATION = {\n DRAW: 'draw',\n MASK: 'mask',\n TERRAIN: 'terrain'\n};\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { COORDINATE_SYSTEM, PROJECTION_MODE, UNIT } from \"../../lib/constants.js\";\n// We are generating these from the js code in constants.js\nconst COORDINATE_SYSTEM_GLSL_CONSTANTS = Object.keys(COORDINATE_SYSTEM)\n .map(key => `const int COORDINATE_SYSTEM_${key} = ${COORDINATE_SYSTEM[key]};`)\n .join('');\nconst PROJECTION_MODE_GLSL_CONSTANTS = Object.keys(PROJECTION_MODE)\n .map(key => `const int PROJECTION_MODE_${key} = ${PROJECTION_MODE[key]};`)\n .join('');\nconst UNIT_GLSL_CONSTANTS = Object.keys(UNIT)\n .map(key => `const int UNIT_${key.toUpperCase()} = ${UNIT[key]};`)\n .join('');\nexport default `\\\n${COORDINATE_SYSTEM_GLSL_CONSTANTS}\n${PROJECTION_MODE_GLSL_CONSTANTS}\n${UNIT_GLSL_CONSTANTS}\nuniform int project_uCoordinateSystem;\nuniform int project_uProjectionMode;\nuniform float project_uScale;\nuniform bool project_uWrapLongitude;\nuniform vec3 project_uCommonUnitsPerMeter;\nuniform vec3 project_uCommonUnitsPerWorldUnit;\nuniform vec3 project_uCommonUnitsPerWorldUnit2;\nuniform vec4 project_uCenter;\nuniform mat4 project_uModelMatrix;\nuniform mat4 project_uViewProjectionMatrix;\nuniform vec2 project_uViewportSize;\nuniform float project_uDevicePixelRatio;\nuniform float project_uFocalDistance;\nuniform vec3 project_uCameraPosition;\nuniform vec3 project_uCoordinateOrigin;\nuniform vec3 project_uCommonOrigin;\nuniform bool project_uPseudoMeters;\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0;\nconst float GLOBE_RADIUS = 256.0;\nfloat project_size_at_latitude(float lat) {\nfloat y = clamp(lat, -89.9, 89.9);\nreturn 1.0 / cos(radians(y));\n}\nfloat project_size() {\nif (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR &&\nproject_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\nproject_uPseudoMeters == false) {\nif (geometry.position.w == 0.0) {\nreturn project_size_at_latitude(geometry.worldPosition.y);\n}\nfloat y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\nfloat y2 = y * y;\nfloat y4 = y2 * y2;\nfloat y6 = y4 * y2;\nreturn 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n}\nreturn 1.0;\n}\nfloat project_size_at_latitude(float meters, float lat) {\nreturn meters * project_uCommonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\nfloat project_size(float meters) {\nreturn meters * project_uCommonUnitsPerMeter.z * project_size();\n}\nvec2 project_size(vec2 meters) {\nreturn meters * project_uCommonUnitsPerMeter.xy * project_size();\n}\nvec3 project_size(vec3 meters) {\nreturn meters * project_uCommonUnitsPerMeter * project_size();\n}\nvec4 project_size(vec4 meters) {\nreturn vec4(meters.xyz * project_uCommonUnitsPerMeter, meters.w);\n}\nmat3 project_get_orientation_matrix(vec3 up) {\nvec3 uz = normalize(up);\nvec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\nvec3 uy = cross(uz, ux);\nreturn mat3(ux, uy, uz);\n}\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\nif (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\ntransform = project_get_orientation_matrix(commonPosition);\nreturn true;\n}\nreturn false;\n}\nvec3 project_normal(vec3 vector) {\nvec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0);\nvec3 n = normalize(normal_modelspace.xyz * project_uCommonUnitsPerMeter);\nmat3 rotation;\nif (project_needs_rotation(geometry.position.xyz, rotation)) {\nn = rotation * n;\n}\nreturn n;\n}\nvec4 project_offset_(vec4 offset) {\nfloat dy = offset.y;\nvec3 commonUnitsPerWorldUnit = project_uCommonUnitsPerWorldUnit + project_uCommonUnitsPerWorldUnit2 * dy;\nreturn vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\nvec2 project_mercator_(vec2 lnglat) {\nfloat x = lnglat.x;\nif (project_uWrapLongitude) {\nx = mod(x + 180., 360.0) - 180.;\n}\nfloat y = clamp(lnglat.y, -89.9, 89.9);\nreturn vec2(\nradians(x) + PI,\nPI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n) * WORLD_SCALE;\n}\nvec3 project_globe_(vec3 lnglatz) {\nfloat lambda = radians(lnglatz.x);\nfloat phi = radians(lnglatz.y);\nfloat cosPhi = cos(phi);\nfloat D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\nreturn vec3(\nsin(lambda) * cosPhi,\n-cos(lambda) * cosPhi,\nsin(phi)\n) * D;\n}\nvec4 project_position(vec4 position, vec3 position64Low) {\nvec4 position_world = project_uModelMatrix * position;\nif (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) {\nif (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_mercator_(position_world.xy),\nproject_size_at_latitude(position_world.z, position_world.y),\nposition_world.w\n);\n}\nif (project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\nposition_world.xyz += project_uCoordinateOrigin;\n}\n}\nif (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\nif (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_globe_(position_world.xyz),\nposition_world.w\n);\n}\n}\nif (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\nif (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nif (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) {\nreturn vec4(\nproject_mercator_(position_world.xy) - project_uCommonOrigin.xy,\nproject_size(position_world.z),\nposition_world.w\n);\n}\n}\n}\nif (project_uProjectionMode == PROJECTION_MODE_IDENTITY ||\n(project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n(project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\nposition_world.xyz -= project_uCoordinateOrigin;\n}\nreturn project_offset_(position_world) + project_offset_(project_uModelMatrix * vec4(position64Low, 0.0));\n}\nvec4 project_position(vec4 position) {\nreturn project_position(position, ZERO_64_LOW);\n}\nvec3 project_position(vec3 position, vec3 position64Low) {\nvec4 projected_position = project_position(vec4(position, 1.0), position64Low);\nreturn projected_position.xyz;\n}\nvec3 project_position(vec3 position) {\nvec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\nreturn projected_position.xyz;\n}\nvec2 project_position(vec2 position) {\nvec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\nreturn projected_position.xy;\n}\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\nreturn viewProjectionMatrix * position + center;\n}\nvec4 project_common_position_to_clipspace(vec4 position) {\nreturn project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project_uCenter);\n}\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\nvec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio * 2.0;\nreturn offset * project_uFocalDistance;\n}\nfloat project_size_to_pixel(float meters) {\nreturn project_size(meters) * project_uScale;\n}\nfloat project_size_to_pixel(float size, int unit) {\nif (unit == UNIT_METERS) return project_size_to_pixel(size);\nif (unit == UNIT_COMMON) return size * project_uScale;\nreturn size;\n}\nfloat project_pixel_size(float pixels) {\nreturn pixels / project_uScale;\n}\nvec2 project_pixel_size(vec2 pixels) {\nreturn pixels / project_uScale;\n}\n`;\n","// @eslint-disable\n// @ts-nocheck\n/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport const EPSILON = 0.000001;\nexport let ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport const RANDOM = Math.random;\nexport const ANGLE_ORDER = 'zyx';\n/**\n * Symmetric round\n * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background\n *\n * @param {Number} a value to round\n */\nexport function round(a) {\n if (a >= 0)\n return Math.round(a);\n return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);\n}\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nconst degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\n","// @eslint-disable\n// @ts-nocheck\nimport * as glMatrix from './common.js';\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\nexport function create() {\n const out = new glMatrix.ARRAY_TYPE(4);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\nexport function clone(a) {\n const out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\nexport function fromValues(x, y, z, w) {\n const out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * symmetric round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n out[3] = glMatrix.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\nexport function normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n let len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\nexport function cross(out, u, v, w) {\n const A = v[0] * w[1] - v[1] * w[0];\n const B = v[0] * w[2] - v[2] * w[0];\n const C = v[0] * w[3] - v[3] * w[0];\n const D = v[1] * w[2] - v[2] * w[1];\n const E = v[1] * w[3] - v[3] * w[1];\n const F = v[2] * w[3] - v[3] * w[2];\n const G = u[0];\n const H = u[1];\n const I = u[2];\n const J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\nexport function lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec4} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n let v1;\n let v2;\n let v3;\n let v4;\n let s1;\n let s2;\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n const d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\nexport function transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\nexport function transformQuat(out, a, q) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n // calculate quat * vec\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return `vec4(${a[0]}, ${a[1]}, ${a[2]}, ${a[3]})`;\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n return (Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\nexport const sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\nexport const mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\nexport const div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\nexport const dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\nexport const sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\nexport const len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\nexport const sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport const forEach = (function () {\n const vec = create();\n return function (a, stride, offset, count, fn, arg) {\n let i;\n let l;\n if (!stride) {\n stride = 4;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n }\n else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n return a;\n };\n})();\n","// @eslint-disable\n// @ts-nocheck\nimport * as glMatrix from './common.js';\n/**\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\n * @module mat4\n */\n/**\n * Creates a new identity mat4\n *\n * @returns a new 4x4 matrix\n */\nexport function create() {\n const out = new glMatrix.ARRAY_TYPE(16);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nexport function clone(a) {\n const out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n const out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a12 = a[6];\n const a13 = a[7];\n const a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n }\n else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function invert(out, a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\nexport function adjoint(out, a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\nexport function determinant(a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b0 = a00 * a11 - a01 * a10;\n const b1 = a00 * a12 - a02 * a10;\n const b2 = a01 * a12 - a02 * a11;\n const b3 = a20 * a31 - a21 * a30;\n const b4 = a20 * a32 - a22 * a30;\n const b5 = a21 * a32 - a22 * a31;\n const b6 = a00 * b5 - a01 * b4 + a02 * b3;\n const b7 = a10 * b5 - a11 * b4 + a12 * b3;\n const b8 = a20 * b2 - a21 * b1 + a22 * b0;\n const b9 = a30 * b2 - a31 * b1 + a32 * b0;\n // Calculate the determinant\n return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function multiply(out, a, b) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n // Cache only the current line of the second matrix\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\nexport function translate(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n let a00;\n let a01;\n let a02;\n let a03;\n let a10;\n let a11;\n let a12;\n let a13;\n let a20;\n let a21;\n let a22;\n let a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n }\n else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nexport function scale(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function rotate(out, a, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n let c;\n let s;\n let t;\n let a00;\n let a01;\n let a02;\n let a03;\n let a10;\n let a11;\n let a12;\n let a13;\n let a20;\n let a21;\n let a22;\n let a23;\n let b00;\n let b01;\n let b02;\n let b10;\n let b11;\n let b12;\n let b20;\n let b21;\n let b22;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c;\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateX(out, a, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateY(out, a, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function rotateZ(out, a, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nexport function fromRotation(out, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n let c;\n let s;\n let t;\n if (len < glMatrix.EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromXRotation(out, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromYRotation(out, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nexport function fromZRotation(out, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\nexport function fromQuat2(out, a) {\n const translation = new glMatrix.ARRAY_TYPE(3);\n const bx = -a[0];\n const by = -a[1];\n const bz = -a[2];\n const bw = a[3];\n const ax = a[4];\n const ay = a[5];\n const az = a[6];\n const aw = a[7];\n const magnitude = bx * bx + by * by + bz * bz + bw * bw;\n // Only scale if it makes sense\n if (magnitude > 0) {\n translation[0] = ((ax * bw + aw * bx + ay * bz - az * by) * 2) / magnitude;\n translation[1] = ((ay * bw + aw * by + az * bx - ax * bz) * 2) / magnitude;\n translation[2] = ((az * bw + aw * bz + ax * by - ay * bx) * 2) / magnitude;\n }\n else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\nexport function getScaling(out, mat) {\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\nexport function getRotation(out, mat) {\n const scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n const is1 = 1 / scaling[0];\n const is2 = 1 / scaling[1];\n const is3 = 1 / scaling[2];\n const sm11 = mat[0] * is1;\n const sm12 = mat[1] * is2;\n const sm13 = mat[2] * is3;\n const sm21 = mat[4] * is1;\n const sm22 = mat[5] * is2;\n const sm23 = mat[6] * is3;\n const sm31 = mat[8] * is1;\n const sm32 = mat[9] * is2;\n const sm33 = mat[10] * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n return out;\n}\n/**\n * Decomposes a transformation matrix into its rotation, translation\n * and scale components. Returns only the rotation component\n * @param {quat} out_r Quaternion to receive the rotation component\n * @param {vec3} out_t Vector to receive the translation vector\n * @param {vec3} out_s Vector to receive the scaling factor\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @returns {quat} out_r\n */\nexport function decompose(out_r, out_t, out_s, mat) {\n out_t[0] = mat[12];\n out_t[1] = mat[13];\n out_t[2] = mat[14];\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n const is1 = 1 / out_s[0];\n const is2 = 1 / out_s[1];\n const is3 = 1 / out_s[2];\n const sm11 = m11 * is1;\n const sm12 = m12 * is2;\n const sm13 = m13 * is3;\n const sm21 = m21 * is1;\n const sm22 = m22 * is2;\n const sm23 = m23 * is3;\n const sm31 = m31 * is1;\n const sm32 = m32 * is2;\n const sm33 = m33 * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out_r[3] = 0.25 * S;\n out_r[0] = (sm23 - sm32) / S;\n out_r[1] = (sm31 - sm13) / S;\n out_r[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out_r[3] = (sm23 - sm32) / S;\n out_r[0] = 0.25 * S;\n out_r[1] = (sm12 + sm21) / S;\n out_r[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out_r[3] = (sm31 - sm13) / S;\n out_r[0] = (sm12 + sm21) / S;\n out_r[1] = 0.25 * S;\n out_r[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out_r[3] = (sm12 - sm21) / S;\n out_r[0] = (sm31 + sm13) / S;\n out_r[1] = (sm23 + sm32) / S;\n out_r[2] = 0.25 * S;\n }\n return out_r;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n const ox = o[0];\n const oy = o[1];\n const oz = o[2];\n const out0 = (1 - (yy + zz)) * sx;\n const out1 = (xy + wz) * sx;\n const out2 = (xz - wy) * sx;\n const out4 = (xy - wz) * sy;\n const out5 = (1 - (xx + zz)) * sy;\n const out6 = (yz + wx) * sy;\n const out8 = (xz + wy) * sz;\n const out9 = (yz - wx) * sz;\n const out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\nexport function fromQuat(out, q) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function frustum(out, left, right, bottom, top, near, far) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n const nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\nexport const perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n const upTan = Math.tan((fov.upDegrees * Math.PI) / 180.0);\n const downTan = Math.tan((fov.downDegrees * Math.PI) / 180.0);\n const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180.0);\n const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180.0);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = (far * near) / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\nexport const ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function lookAt(out, eye, center, up) {\n let len;\n let x0;\n let x1;\n let x2;\n let y0;\n let y1;\n let y2;\n let z0;\n let z1;\n let z2;\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const centerx = center[0];\n const centery = center[1];\n const centerz = center[2];\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON &&\n Math.abs(eyey - centery) < glMatrix.EPSILON &&\n Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n }\n else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n }\n else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\nexport function targetTo(out, eye, target, up) {\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n let z0 = eyex - target[0];\n let z1 = eyey - target[1];\n let z2 = eyez - target[2];\n let len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nexport function str(a) {\n return `mat4(${a[0]}, ${a[1]}, ${a[2]}, ${a[3]}, ${a[4]}, ${a[5]}, ${a[6]}, ${a[7]}, ${a[8]}, ${a[9]}, ${a[10]}, ${a[11]}, ${a[12]}, ${a[13]}, ${a[14]}, ${a[15]})`;\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nexport function frob(a) {\n return Math.sqrt(a[0] * a[0] +\n a[1] * a[1] +\n a[2] * a[2] +\n a[3] * a[3] +\n a[4] * a[4] +\n a[5] * a[5] +\n a[6] * a[6] +\n a[7] * a[7] +\n a[8] * a[8] +\n a[9] * a[9] +\n a[10] * a[10] +\n a[11] * a[11] +\n a[12] * a[12] +\n a[13] * a[13] +\n a[14] * a[14] +\n a[15] * a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return (a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15]);\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const a4 = a[4];\n const a5 = a[5];\n const a6 = a[6];\n const a7 = a[7];\n const a8 = a[8];\n const a9 = a[9];\n const a10 = a[10];\n const a11 = a[11];\n const a12 = a[12];\n const a13 = a[13];\n const a14 = a[14];\n const a15 = a[15];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n const b4 = b[4];\n const b5 = b[5];\n const b6 = b[6];\n const b7 = b[7];\n const b8 = b[8];\n const b9 = b[9];\n const b10 = b[10];\n const b11 = b[11];\n const b12 = b[12];\n const b13 = b[13];\n const b14 = b[14];\n const b15 = b[15];\n return (Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) &&\n Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) &&\n Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) &&\n Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) &&\n Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) &&\n Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) &&\n Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) &&\n Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) &&\n Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) &&\n Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) &&\n Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) &&\n Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) &&\n Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15)));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nexport const mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\nexport const sub = subtract;\n","function isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n // Special treatment for arrays: compare 1-level deep\n // This is to support equality of matrix/coordinate props\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n/**\n * Speed up consecutive function calls by caching the result of calls with identical input\n * https://en.wikipedia.org/wiki/Memoization\n * @param {function} compute - the function to be memoized\n */\nexport default function memoize(compute) {\n let cachedArgs = {};\n let cachedResult;\n return (args) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable complexity, camelcase */\nimport { mat4, vec4 } from '@math.gl/core';\nimport { COORDINATE_SYSTEM, PROJECTION_MODE } from \"../../lib/constants.js\";\nimport memoize from \"../../utils/memoize.js\";\n// To quickly set a vector to zero\nconst ZERO_VECTOR = [0, 0, 0, 0];\n// 4x4 matrix that drops 4th component of vector\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\nconst DEFAULT_PIXELS_PER_UNIT2 = [0, 0, 0];\nconst DEFAULT_COORDINATE_ORIGIN = [0, 0, 0];\nconst getMemoizedViewportUniforms = memoize(calculateViewportUniforms);\nexport function getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin = DEFAULT_COORDINATE_ORIGIN) {\n if (coordinateOrigin.length < 3) {\n coordinateOrigin = [coordinateOrigin[0], coordinateOrigin[1], 0];\n }\n let shaderCoordinateOrigin = coordinateOrigin;\n let geospatialOrigin;\n let offsetMode = true;\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n geospatialOrigin = coordinateOrigin;\n }\n else {\n geospatialOrigin = viewport.isGeospatial\n ? // @ts-expect-error longitude and latitude are not defined on the base Viewport, but is expected on geospatial viewports\n [Math.fround(viewport.longitude), Math.fround(viewport.latitude), 0]\n : null;\n }\n switch (viewport.projectionMode) {\n case PROJECTION_MODE.WEB_MERCATOR:\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {\n geospatialOrigin = [0, 0, 0];\n offsetMode = false;\n }\n break;\n case PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET:\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n // viewport center in world space\n // @ts-expect-error when using LNGLAT coordinates, we expect the viewport to be geospatial, in which case geospatialOrigin is defined\n shaderCoordinateOrigin = geospatialOrigin;\n }\n else if (coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {\n // viewport center in common space\n shaderCoordinateOrigin = [\n Math.fround(viewport.center[0]),\n Math.fround(viewport.center[1]),\n 0\n ];\n // Geospatial origin (wgs84) must match shaderCoordinateOrigin (common)\n geospatialOrigin = viewport.unprojectPosition(shaderCoordinateOrigin);\n shaderCoordinateOrigin[0] -= coordinateOrigin[0];\n shaderCoordinateOrigin[1] -= coordinateOrigin[1];\n shaderCoordinateOrigin[2] -= coordinateOrigin[2];\n }\n break;\n case PROJECTION_MODE.IDENTITY:\n shaderCoordinateOrigin = viewport.position.map(Math.fround);\n shaderCoordinateOrigin[2] = shaderCoordinateOrigin[2] || 0;\n break;\n case PROJECTION_MODE.GLOBE:\n offsetMode = false;\n geospatialOrigin = null;\n break;\n default:\n // Unknown projection mode\n offsetMode = false;\n }\n return { geospatialOrigin, shaderCoordinateOrigin, offsetMode };\n}\n// The code that utilizes Matrix4 does the same calculation as their mat4 counterparts,\n// has lower performance but provides error checking.\nfunction calculateMatrixAndOffset(viewport, coordinateSystem, coordinateOrigin) {\n const { viewMatrixUncentered, projectionMatrix } = viewport;\n let { viewMatrix, viewProjectionMatrix } = viewport;\n let projectionCenter = ZERO_VECTOR;\n let originCommon = ZERO_VECTOR;\n let cameraPosCommon = viewport.cameraPosition;\n const { geospatialOrigin, shaderCoordinateOrigin, offsetMode } = getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin);\n if (offsetMode) {\n // Calculate transformed projectionCenter (using 64 bit precision JS)\n // This is the key to offset mode precision\n // (avoids doing this addition in 32 bit precision in GLSL)\n // @ts-expect-error the 4th component is assigned below\n originCommon = viewport.projectPosition(geospatialOrigin || shaderCoordinateOrigin);\n cameraPosCommon = [\n cameraPosCommon[0] - originCommon[0],\n cameraPosCommon[1] - originCommon[1],\n cameraPosCommon[2] - originCommon[2]\n ];\n originCommon[3] = 1;\n // projectionCenter = new Matrix4(viewProjectionMatrix)\n // .transformVector([positionPixels[0], positionPixels[1], 0.0, 1.0]);\n projectionCenter = vec4.transformMat4([], originCommon, viewProjectionMatrix);\n // Always apply uncentered projection matrix if available (shader adds center)\n viewMatrix = viewMatrixUncentered || viewMatrix;\n // Zero out 4th coordinate (\"after\" model matrix) - avoids further translations\n // viewMatrix = new Matrix4(viewMatrixUncentered || viewMatrix)\n // .multiplyRight(VECTOR_TO_POINT_MATRIX);\n viewProjectionMatrix = mat4.multiply([], projectionMatrix, viewMatrix);\n viewProjectionMatrix = mat4.multiply([], viewProjectionMatrix, VECTOR_TO_POINT_MATRIX);\n }\n return {\n viewMatrix,\n viewProjectionMatrix,\n projectionCenter,\n originCommon,\n cameraPosCommon,\n shaderCoordinateOrigin,\n geospatialOrigin\n };\n}\n/**\n * Returns uniforms for shaders based on current projection\n * includes: projection matrix suitable for shaders\n *\n * TODO - Ensure this works with any viewport, not just WebMercatorViewports\n *\n * @param {WebMercatorViewport} viewport -\n * @return {Float32Array} - 4x4 projection matrix that can be used in shaders\n */\nexport function getUniformsFromViewport({ viewport, devicePixelRatio = 1, modelMatrix = null, \n// Match Layer.defaultProps\ncoordinateSystem = COORDINATE_SYSTEM.DEFAULT, coordinateOrigin = DEFAULT_COORDINATE_ORIGIN, autoWrapLongitude = false }) {\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n const uniforms = getMemoizedViewportUniforms({\n viewport,\n devicePixelRatio,\n coordinateSystem,\n coordinateOrigin\n });\n uniforms.project_uWrapLongitude = autoWrapLongitude;\n uniforms.project_uModelMatrix = modelMatrix || IDENTITY_MATRIX;\n return uniforms;\n}\nfunction calculateViewportUniforms({ viewport, devicePixelRatio, coordinateSystem, coordinateOrigin }) {\n const { projectionCenter, viewProjectionMatrix, originCommon, cameraPosCommon, shaderCoordinateOrigin, geospatialOrigin } = calculateMatrixAndOffset(viewport, coordinateSystem, coordinateOrigin);\n // Calculate projection pixels per unit\n const distanceScales = viewport.getDistanceScales();\n const viewportSize = [\n viewport.width * devicePixelRatio,\n viewport.height * devicePixelRatio\n ];\n // Distance at which screen pixels are projected.\n // Used to scale sizes in clipspace to match screen pixels.\n // When using Viewport class's default projection matrix, this yields 1 for orthographic\n // and `viewport.focalDistance` for perspective views\n const focalDistance = vec4.transformMat4([], [0, 0, -viewport.focalDistance, 1], viewport.projectionMatrix)[3] || 1;\n const uniforms = {\n // Projection mode values\n project_uCoordinateSystem: coordinateSystem,\n project_uProjectionMode: viewport.projectionMode,\n project_uCoordinateOrigin: shaderCoordinateOrigin,\n project_uCommonOrigin: originCommon.slice(0, 3),\n project_uCenter: projectionCenter,\n // Backward compatibility\n // TODO: remove in v9\n // @ts-expect-error _pseudoMeters is only defined on WebMercator viewport\n project_uPseudoMeters: Boolean(viewport._pseudoMeters),\n // Screen size\n project_uViewportSize: viewportSize,\n project_uDevicePixelRatio: devicePixelRatio,\n project_uFocalDistance: focalDistance,\n project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter,\n project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter,\n project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2,\n project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom)\n project_uWrapLongitude: false,\n project_uViewProjectionMatrix: viewProjectionMatrix,\n project_uModelMatrix: IDENTITY_MATRIX,\n // This is for lighting calculations\n project_uCameraPosition: cameraPosCommon\n };\n if (geospatialOrigin) {\n // Get high-precision DistanceScales from geospatial viewport\n // TODO: stricter types in Viewport classes\n const distanceScalesAtOrigin = viewport.getDistanceScales(geospatialOrigin);\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.METER_OFFSETS:\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2;\n break;\n case COORDINATE_SYSTEM.LNGLAT:\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n // @ts-expect-error _pseudoMeters only exists on WebMercatorView\n if (!viewport._pseudoMeters) {\n uniforms.project_uCommonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter;\n }\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2;\n break;\n // a.k.a \"preprojected\" positions\n case COORDINATE_SYSTEM.CARTESIAN:\n uniforms.project_uCommonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]];\n uniforms.project_uCommonUnitsPerWorldUnit2 = [\n 0,\n 0,\n distanceScalesAtOrigin.unitsPerMeter2[2]\n ];\n break;\n default:\n break;\n }\n }\n return uniforms;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { fp32 } from '@luma.gl/shadertools';\nimport geometry from \"../misc/geometry.js\";\nimport projectShader from \"./project.glsl.js\";\nimport { getUniformsFromViewport } from \"./viewport-uniforms.js\";\nconst INITIAL_MODULE_OPTIONS = {};\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n if ('viewport' in opts) {\n return getUniformsFromViewport(opts);\n }\n return {};\n}\nexport default {\n name: 'project',\n dependencies: [fp32, geometry],\n vs: projectShader,\n getUniforms\n};\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { ShaderAssembler } from '@luma.gl/shadertools';\nimport { gouraudLighting, phongLighting } from '@luma.gl/shadertools';\nimport project from \"./project/project.js\";\nimport project32 from \"./project32/project32.js\";\nimport shadow from \"./shadow/shadow.js\";\nimport picking from \"./picking/picking.js\";\nconst DEFAULT_MODULES = [project];\nconst SHADER_HOOKS = [\n 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)',\n 'fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)'\n];\nexport function getShaderAssembler() {\n const shaderAssembler = ShaderAssembler.getDefaultShaderAssembler();\n for (const shaderModule of DEFAULT_MODULES) {\n shaderAssembler.addDefaultModule(shaderModule);\n }\n for (const shaderHook of SHADER_HOOKS) {\n shaderAssembler.addShaderHook(shaderHook);\n }\n return shaderAssembler;\n}\nexport { picking, project, project32, gouraudLighting, phongLighting, shadow };\n","export const LIFECYCLE = {\n NO_STATE: 'Awaiting state',\n MATCHED: 'Matched. State transferred from previous layer',\n INITIALIZED: 'Initialized',\n AWAITING_GC: 'Discarded. Awaiting garbage collection',\n AWAITING_FINALIZATION: 'No longer matched. Awaiting garbage collection',\n FINALIZED: 'Finalized! Awaiting garbage collection'\n};\n/* Secret props keys */\n// Symbols are non-enumerable by default, does not show in for...in or Object.keys\n// but are copied with Object.assign ¯\\_(ツ)_/¯\n// Supported everywhere except IE11, can be polyfilled with core-js\nexport const COMPONENT_SYMBOL = Symbol.for('component');\nexport const PROP_TYPES_SYMBOL = Symbol.for('propTypes');\nexport const DEPRECATED_PROPS_SYMBOL = Symbol.for('deprecatedProps');\nexport const ASYNC_DEFAULTS_SYMBOL = Symbol.for('asyncPropDefaults');\nexport const ASYNC_ORIGINAL_SYMBOL = Symbol.for('asyncPropOriginal');\nexport const ASYNC_RESOLVED_SYMBOL = Symbol.for('asyncPropResolved');\n","import deckLog from \"../utils/log.js\";\nimport { getLoggers } from \"./loggers.js\";\n/* debug utility */\nlet loggers = {};\n// Conditionally load default loggers in development mode\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== 'production') {\n loggers = getLoggers(deckLog);\n}\nexport function register(handlers) {\n loggers = handlers;\n}\nexport default function debug(eventType, arg1, arg2, arg3) {\n if (deckLog.level > 0 && loggers[eventType]) {\n // Not using rest parameters to defeat perf hit from array construction\n loggers[eventType].call(null, arg1, arg2, arg3);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/**\n * Flattens a nested array into a single level array,\n * or a single value into an array with one value\n * @example flatten([[1, [2]], [3], 4]) => [1, 2, 3, 4]\n * @example flatten(1) => [1]\n * @param array The array to flatten.\n * @param filter= - Optional predicate called on each `value` to\n * determine if it should be included (pushed onto) the resulting array.\n * @return Returns the new flattened array (new array or `result` if provided)\n */\nexport function flatten(array, filter = () => true) {\n // Wrap single object in array\n if (!Array.isArray(array)) {\n return filter(array) ? [array] : [];\n }\n // Deep flatten and filter the array\n return flattenArray(array, filter, []);\n}\n/** Deep flattens an array. Helper to `flatten`, see its parameters */\nfunction flattenArray(array, filter, result) {\n let index = -1;\n while (++index < array.length) {\n const value = array[index];\n if (Array.isArray(value)) {\n flattenArray(value, filter, result);\n }\n else if (filter(value)) {\n result.push(value);\n }\n }\n return result;\n}\n/** Uses copyWithin to significantly speed up typed array value filling */\nexport function fillArray({ target, source, start = 0, count = 1 }) {\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n }\n else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n return target;\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nexport default function getHiResTimestamp() {\n let timestamp;\n // Get best timer available.\n if (typeof window !== 'undefined' && window.performance) {\n timestamp = window.performance.now();\n }\n else if (typeof process !== 'undefined' && process.hrtime) {\n const timeParts = process.hrtime();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n }\n else {\n timestamp = Date.now();\n }\n return timestamp;\n}\n","import getHiResTimestamp from \"../utils/hi-res-timestamp.js\";\nexport default class Stat {\n constructor(name, type) {\n this.sampleSize = 1;\n this.time = 0;\n this.count = 0;\n this.samples = 0;\n this.lastTiming = 0;\n this.lastSampleTime = 0;\n this.lastSampleCount = 0;\n this._count = 0;\n this._time = 0;\n this._samples = 0;\n this._startTime = 0;\n this._timerPending = false;\n this.name = name;\n this.type = type;\n this.reset();\n }\n reset() {\n this.time = 0;\n this.count = 0;\n this.samples = 0;\n this.lastTiming = 0;\n this.lastSampleTime = 0;\n this.lastSampleCount = 0;\n this._count = 0;\n this._time = 0;\n this._samples = 0;\n this._startTime = 0;\n this._timerPending = false;\n return this;\n }\n setSampleSize(samples) {\n this.sampleSize = samples;\n return this;\n }\n /** Call to increment count (+1) */\n incrementCount() {\n this.addCount(1);\n return this;\n }\n /** Call to decrement count (-1) */\n decrementCount() {\n this.subtractCount(1);\n return this;\n }\n /** Increase count */\n addCount(value) {\n this._count += value;\n this._samples++;\n this._checkSampling();\n return this;\n }\n /** Decrease count */\n subtractCount(value) {\n this._count -= value;\n this._samples++;\n this._checkSampling();\n return this;\n }\n /** Add an arbitrary timing and bump the count */\n addTime(time) {\n this._time += time;\n this.lastTiming = time;\n this._samples++;\n this._checkSampling();\n return this;\n }\n /** Start a timer */\n timeStart() {\n this._startTime = getHiResTimestamp();\n this._timerPending = true;\n return this;\n }\n /** End a timer. Adds to time and bumps the timing count. */\n timeEnd() {\n if (!this._timerPending) {\n return this;\n }\n this.addTime(getHiResTimestamp() - this._startTime);\n this._timerPending = false;\n this._checkSampling();\n return this;\n }\n getSampleAverageCount() {\n return this.sampleSize > 0 ? this.lastSampleCount / this.sampleSize : 0;\n }\n /** Calculate average time / count for the previous window */\n getSampleAverageTime() {\n return this.sampleSize > 0 ? this.lastSampleTime / this.sampleSize : 0;\n }\n /** Calculate counts per second for the previous window */\n getSampleHz() {\n return this.lastSampleTime > 0 ? this.sampleSize / (this.lastSampleTime / 1000) : 0;\n }\n getAverageCount() {\n return this.samples > 0 ? this.count / this.samples : 0;\n }\n /** Calculate average time / count */\n getAverageTime() {\n return this.samples > 0 ? this.time / this.samples : 0;\n }\n /** Calculate counts per second */\n getHz() {\n return this.time > 0 ? this.samples / (this.time / 1000) : 0;\n }\n _checkSampling() {\n if (this._samples === this.sampleSize) {\n this.lastSampleTime = this._time;\n this.lastSampleCount = this._count;\n this.count += this._count;\n this.time += this._time;\n this.samples += this._samples;\n this._time = 0;\n this._count = 0;\n this._samples = 0;\n }\n }\n}\n","// probe.gl, MIT license\nimport Stat from \"./stat.js\";\n/** A \"bag\" of `Stat` objects, can be visualized using `StatsWidget` */\nexport default class Stats {\n constructor(options) {\n this.stats = {};\n this.id = options.id;\n this.stats = {};\n this._initializeStats(options.stats);\n Object.seal(this);\n }\n /** Acquire a stat. Create if it doesn't exist. */\n get(name, type = 'count') {\n return this._getOrCreate({ name, type });\n }\n get size() {\n return Object.keys(this.stats).length;\n }\n /** Reset all stats */\n reset() {\n for (const stat of Object.values(this.stats)) {\n stat.reset();\n }\n return this;\n }\n forEach(fn) {\n for (const stat of Object.values(this.stats)) {\n fn(stat);\n }\n }\n getTable() {\n const table = {};\n this.forEach(stat => {\n table[stat.name] = {\n time: stat.time || 0,\n count: stat.count || 0,\n average: stat.getAverageTime() || 0,\n hz: stat.getHz() || 0\n };\n });\n return table;\n }\n _initializeStats(stats = []) {\n stats.forEach(stat => this._getOrCreate(stat));\n }\n _getOrCreate(stat) {\n const { name, type } = stat;\n let result = this.stats[name];\n if (!result) {\n if (stat instanceof Stat) {\n result = stat;\n }\n else {\n result = new Stat(name, type);\n }\n this.stats[name] = result;\n }\n return result;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst isBoolean = (x) => typeof x === 'boolean';\nconst isFunction = (x) => typeof x === 'function';\nexport const isObject = (x) => x !== null && typeof x === 'object';\nexport const isPureObject = (x) => isObject(x) && x.constructor === {}.constructor;\nexport const isPromise = (x) => isObject(x) && isFunction(x.then);\nexport const isIterable = (x) => Boolean(x) && typeof x[Symbol.iterator] === 'function';\nexport const isAsyncIterable = (x) => x && typeof x[Symbol.asyncIterator] === 'function';\nexport const isIterator = (x) => x && isFunction(x.next);\nexport const isResponse = (x) => (typeof Response !== 'undefined' && x instanceof Response) ||\n (x && x.arrayBuffer && x.text && x.json);\nexport const isFile = (x) => typeof File !== 'undefined' && x instanceof File;\nexport const isBlob = (x) => typeof Blob !== 'undefined' && x instanceof Blob;\n/** Check for Node.js `Buffer` without triggering bundler to include buffer polyfill */\nexport const isBuffer = (x) => x && typeof x === 'object' && x.isBuffer;\nexport const isWritableDOMStream = (x) => isObject(x) && isFunction(x.abort) && isFunction(x.getWriter);\nexport const isReadableDOMStream = (x) => (typeof ReadableStream !== 'undefined' && x instanceof ReadableStream) ||\n (isObject(x) && isFunction(x.tee) && isFunction(x.cancel) && isFunction(x.getReader));\n// Not implemented in Firefox: && isFunction(x.pipeTo)\nexport const isWritableNodeStream = (x) => isObject(x) && isFunction(x.end) && isFunction(x.write) && isBoolean(x.writable);\nexport const isReadableNodeStream = (x) => isObject(x) && isFunction(x.read) && isFunction(x.pipe) && isBoolean(x.readable);\nexport const isReadableStream = (x) => isReadableDOMStream(x) || isReadableNodeStream(x);\nexport const isWritableStream = (x) => isWritableDOMStream(x) || isWritableNodeStream(x);\n","/**\n * Throws an `Error` with the optional `message` if `condition` is falsy\n * @note Replacement for the external assert method to reduce bundle size\n */\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nexport function isLoaderObject(loader) {\n if (!loader) {\n return false;\n }\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n const hasExtensions = Array.isArray(loader?.extensions);\n /* Now handled by types and worker loaders do not have these\n let hasParser =\n loader.parseTextSync ||\n loader.parseSync ||\n loader.parse ||\n loader.parseStream || // TODO Remove, Replace with parseInBatches\n loader.parseInBatches;\n */\n return hasExtensions;\n}\nexport function normalizeLoader(loader) {\n // This error is fairly easy to trigger by mixing up import statements etc\n // So we make an exception and add a developer error message for this case\n // To help new users from getting stuck here\n assert(loader, 'null loader');\n assert(isLoaderObject(loader), 'invalid loader');\n // NORMALIZE [LOADER, OPTIONS] => LOADER\n // If [loader, options], create a new loaders object with options merged in\n let options;\n if (Array.isArray(loader)) {\n options = loader[1];\n loader = loader[0];\n loader = {\n ...loader,\n options: { ...loader.options, ...options }\n };\n }\n // NORMALIZE text and binary flags\n // Ensure at least one of text/binary flags are properly set\n // @ts-expect-error\n if (loader?.parseTextSync || loader?.parseText) {\n loader.text = true;\n }\n if (!loader.text) {\n loader.binary = true;\n }\n return loader;\n}\n","// Simple file alias mechanisms for tests.\nlet pathPrefix = '';\nconst fileAliases = {};\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix() {\n return pathPrefix;\n}\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases) {\n Object.assign(fileAliases, aliases);\n}\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename) {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport class FetchError extends Error {\n constructor(message, info) {\n super(message);\n this.reason = info.reason;\n this.url = info.url;\n this.response = info.response;\n }\n /** A best effort reason for why the fetch failed */\n reason;\n /** The URL that failed to load. Empty string if not available. */\n url;\n /** The Response object, if any. */\n response;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n/**\n * Compare two MIME types, case insensitively etc.\n * @param mimeType1\n * @param mimeType2\n * @returns true if the MIME types are equivalent\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type\n */\nexport function compareMIMETypes(mimeType1, mimeType2) {\n if (mimeType1.toLowerCase() === mimeType2.toLowerCase()) {\n return true;\n }\n return false;\n}\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString) {\n // If resource is a data url, extract any embedded mime type\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n if (matches) {\n return matches[1];\n }\n return mimeString;\n}\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url) {\n // If resource is a data URL, extract any embedded mime type\n const matches = DATA_URL_PATTERN.exec(url);\n if (matches) {\n return matches[1];\n }\n return '';\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst QUERY_STRING_PATTERN = /\\?.*/;\nexport function extractQueryString(url) {\n const matches = url.match(QUERY_STRING_PATTERN);\n return matches && matches[0];\n}\nexport function stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\nexport function shortenUrlForDisplay(url) {\n if (url.length < 50) {\n return url;\n }\n const urlEnd = url.slice(url.length - 15);\n const urlStart = url.substr(0, 32);\n return `${urlStart}...${urlEnd}`;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse, isBlob } from \"../../javascript-utils/is-type.js\";\nimport { parseMIMEType, parseMIMETypeFromURL } from \"./mime-type-utils.js\";\nimport { stripQueryString } from \"./url-utils.js\";\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrl(resource) {\n // If resource is a `Response`, it contains the information directly as a field\n if (isResponse(resource)) {\n const response = resource;\n return response.url;\n }\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n const blob = resource;\n // File objects have a \"name\" property. Blob objects don't have any\n // url (name) information\n return blob.name || '';\n }\n if (typeof resource === 'string') {\n return resource;\n }\n // Unknown\n return '';\n}\n/**\n * Returns the URL associated with this resource.\n * The returned value may include a query string and need further processing.\n * If it cannot determine url, the corresponding value will be an empty string\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceMIMEType(resource) {\n // If resource is a response, it contains the information directly\n if (isResponse(resource)) {\n const response = resource;\n const contentTypeHeader = response.headers.get('content-type') || '';\n const noQueryUrl = stripQueryString(response.url);\n return parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(noQueryUrl);\n }\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n const blob = resource;\n return blob.type || '';\n }\n if (typeof resource === 'string') {\n return parseMIMETypeFromURL(resource);\n }\n // Unknown\n return '';\n}\n/**\n * Returns (approximate) content length for a resource if it can be determined.\n * Returns -1 if content length cannot be determined.\n * @param resource\n\n * @note string parameters are NOT assumed to be URLs\n */\nexport function getResourceContentLength(resource) {\n if (isResponse(resource)) {\n const response = resource;\n return response.headers['content-length'] || -1;\n }\n if (isBlob(resource)) {\n const blob = resource;\n return blob.size;\n }\n if (typeof resource === 'string') {\n // TODO - handle data URL?\n return resource.length;\n }\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n return -1;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isResponse } from \"../../javascript-utils/is-type.js\";\nimport { FetchError } from \"../fetch/fetch-error.js\";\nimport { getResourceContentLength, getResourceUrl, getResourceMIMEType } from \"./resource-utils.js\";\nimport { shortenUrlForDisplay } from \"./url-utils.js\";\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource) {\n if (isResponse(resource)) {\n return resource;\n }\n // Add content-length header if possible\n const headers = {};\n const contentLength = getResourceContentLength(resource);\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n // `new Response(File)` does not preserve content-type and URL\n // so we add them here\n const url = getResourceUrl(resource);\n const type = getResourceMIMEType(resource);\n if (type) {\n headers['content-type'] = type;\n }\n // Add a custom header with initial bytes if available\n const initialDataUrl = await getInitialDataUrl(resource);\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n // TODO - is this the best way of handling strings?\n // Maybe package as data URL instead?\n if (typeof resource === 'string') {\n // Convert to ArrayBuffer to avoid Response treating it as a URL\n resource = new TextEncoder().encode(resource);\n }\n // Attempt to create a Response from the resource, adding headers and setting url\n const response = new Response(resource, { headers });\n // We can't control `Response.url` via constructor, use a property override to record URL.\n Object.defineProperty(response, 'url', { value: url });\n return response;\n}\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response) {\n if (!response.ok) {\n const error = await getResponseError(response);\n throw error;\n }\n}\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response) {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n message = message.length > 60 ? `${message.slice(0, 60)}...` : message;\n throw new Error(message);\n }\n}\n// HELPERS\nasync function getResponseError(response) {\n const shortUrl = shortenUrlForDisplay(response.url);\n let message = `Failed to fetch resource (${response.status}) ${response.statusText}: ${shortUrl}`;\n message = message.length > 100 ? `${message.slice(0, 100)}...` : message;\n const info = {\n reason: response.statusText,\n url: response.url,\n response\n };\n try {\n const contentType = response.headers.get('Content-Type');\n info.reason = contentType?.includes('application/json')\n ? await response.json()\n : response.text();\n }\n catch (error) {\n // eslint forbids return in a finally statement, so we just catch here\n }\n return new FetchError(message, info);\n}\nasync function getInitialDataUrl(resource) {\n const INITIAL_DATA_LENGTH = 5;\n if (typeof resource === 'string') {\n return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n }\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event?.target?.result);\n reader.readAsDataURL(blobSlice);\n });\n }\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return `data:base64,${base64}`;\n }\n return null;\n}\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\nimport { makeResponse } from \"../utils/response-utils.js\";\n// import {FetchError} from './fetch-error';\nexport function isNodePath(url) {\n return !isRequestURL(url) && !isDataURL(url);\n}\nexport function isRequestURL(url) {\n return url.startsWith('http:') || url.startsWith('https:');\n}\nexport function isDataURL(url) {\n return url.startsWith('data:');\n}\n/**\n * fetch API compatible function\n * - Supports fetching from Node.js local file system paths\n * - Respects pathPrefix and file aliases\n */\nexport async function fetchFile(urlOrData, fetchOptions) {\n if (typeof urlOrData === 'string') {\n const url = resolvePath(urlOrData);\n // Support fetching from local file system\n if (isNodePath(url)) {\n if (globalThis.loaders?.fetchNode) {\n return globalThis.loaders?.fetchNode(url, fetchOptions);\n }\n // throw new Error(\n // 'fetchFile: globalThis.loaders.fetchNode not defined. Install @loaders.gl/polyfills'\n // );\n }\n // Call global fetch\n return await fetch(url, fetchOptions);\n }\n // TODO - should we still call fetch on non-URL inputs?\n return await makeResponse(urlOrData);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// probe.gl Log compatible loggers\nimport { Log } from '@probe.gl/log';\nexport const probeLog = new Log({ id: 'loaders.gl' });\n// Logs nothing\nexport class NullLog {\n log() {\n return () => { };\n }\n info() {\n return () => { };\n }\n warn() {\n return () => { };\n }\n error() {\n return () => { };\n }\n}\n// Logs to console\nexport class ConsoleLog {\n console;\n constructor() {\n this.console = console; // eslint-disable-line\n }\n log(...args) {\n return this.console.log.bind(this.console, ...args);\n }\n info(...args) {\n return this.console.info.bind(this.console, ...args);\n }\n warn(...args) {\n return this.console.warn.bind(this.console, ...args);\n }\n error(...args) {\n return this.console.error.bind(this.console, ...args);\n }\n}\n","// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in a browser */\nexport const isBrowser = \n// @ts-ignore process does not exist on browser\nBoolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\n/** true if running in a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@loaders.gl/loader-utils';\nimport { ConsoleLog } from \"./loggers.js\";\nexport const DEFAULT_LOADER_OPTIONS = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n useLocalLibraries: false,\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n _nodeWorkers: false, // By default do not support node workers\n _workerType: '', // 'test' to use locally generated workers\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules } from '@loaders.gl/loader-utils';\nimport { isPureObject, isObject } from \"../../javascript-utils/is-type.js\";\nimport { probeLog, NullLog } from \"./loggers.js\";\nimport { DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS } from \"./option-defaults.js\";\n/**\n * Helper for safely accessing global loaders.gl variables\n * Wraps initialization of global variable in function to defeat overly aggressive tree-shakers\n */\nexport function getGlobalLoaderState() {\n // @ts-ignore\n globalThis.loaders = globalThis.loaders || {};\n // @ts-ignore\n const { loaders } = globalThis;\n // Add _state object to keep separate from modules added to globalThis.loaders\n if (!loaders._state) {\n loaders._state = {};\n }\n return loaders._state;\n}\n/**\n * Store global loader options on the global object to increase chances of cross loaders-version interoperability\n * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n * @returns global loader options merged with default loader options\n */\nexport function getGlobalLoaderOptions() {\n const state = getGlobalLoaderState();\n // Ensure all default loader options from this library are mentioned\n state.globalOptions = state.globalOptions || { ...DEFAULT_LOADER_OPTIONS };\n return state.globalOptions;\n}\n/**\n * Set global loader options\n * @param options\n */\nexport function setGlobalOptions(options) {\n const state = getGlobalLoaderState();\n const globalOptions = getGlobalLoaderOptions();\n // @ts-expect-error First param looks incorrect\n state.globalOptions = normalizeOptionsInternal(globalOptions, options);\n // Make sure any new modules are registered\n registerJSModules(options.modules);\n}\n/**\n * Merges options with global opts and loader defaults, also injects baseUri\n * @param options\n * @param loader\n * @param loaders\n * @param url\n */\nexport function normalizeOptions(options, loader, loaders, url) {\n loaders = loaders || [];\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n validateOptions(options, loaders);\n return normalizeOptionsInternal(loader, options, url);\n}\n// VALIDATE OPTIONS\n/**\n * Warn for unsupported options\n * @param options\n * @param loaders\n */\nfunction validateOptions(options, loaders) {\n // Check top level options\n validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);\n for (const loader of loaders) {\n // Get the scoped, loader specific options from the user supplied options\n const idOptions = ((options && options[loader.id]) || {});\n // Get scoped, loader specific default and deprecated options from the selected loader\n const loaderOptions = (loader.options && loader.options[loader.id]) || {};\n const deprecatedOptions = (loader.deprecatedOptions && loader.deprecatedOptions[loader.id]) || {};\n // Validate loader specific options\n // @ts-ignore\n validateOptionsObject(idOptions, loader.id, loaderOptions, deprecatedOptions, loaders);\n }\n}\n// eslint-disable-next-line max-params, complexity\nfunction validateOptionsObject(options, id, defaultOptions, deprecatedOptions, loaders) {\n const loaderName = id || 'Top level';\n const prefix = id ? `${id}.` : '';\n for (const key in options) {\n // If top level option value is an object it could options for a loader, so ignore\n const isSubOptions = !id && isObject(options[key]);\n const isBaseUriOption = key === 'baseUri' && !id;\n const isWorkerUrlOption = key === 'workerUrl' && id;\n // .workerUrl requires special handling as it is now auto-generated and no longer specified as a default option.\n if (!(key in defaultOptions) && !isBaseUriOption && !isWorkerUrlOption) {\n // Issue deprecation warnings\n if (key in deprecatedOptions) {\n probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' no longer supported, use \\'${deprecatedOptions[key]}\\'`)();\n }\n else if (!isSubOptions) {\n const suggestion = findSimilarOption(key, loaders);\n probeLog.warn(`${loaderName} loader option \\'${prefix}${key}\\' not recognized. ${suggestion}`)();\n }\n }\n }\n}\nfunction findSimilarOption(optionKey, loaders) {\n const lowerCaseOptionKey = optionKey.toLowerCase();\n let bestSuggestion = '';\n for (const loader of loaders) {\n for (const key in loader.options) {\n if (optionKey === key) {\n return `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n const lowerCaseKey = key.toLowerCase();\n const isPartialMatch = lowerCaseOptionKey.startsWith(lowerCaseKey) || lowerCaseKey.startsWith(lowerCaseOptionKey);\n if (isPartialMatch) {\n bestSuggestion = bestSuggestion || `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n }\n }\n return bestSuggestion;\n}\nfunction normalizeOptionsInternal(loader, options, url) {\n const loaderDefaultOptions = loader.options || {};\n const mergedOptions = { ...loaderDefaultOptions };\n addUrlOptions(mergedOptions, url);\n // LOGGING: options.log can be set to `null` to defeat logging\n if (mergedOptions.log === null) {\n mergedOptions.log = new NullLog();\n }\n mergeNestedFields(mergedOptions, getGlobalLoaderOptions());\n mergeNestedFields(mergedOptions, options);\n return mergedOptions;\n}\n// Merge nested options objects\nfunction mergeNestedFields(mergedOptions, options) {\n for (const key in options) {\n // Check for nested options\n // object in options => either no key in defaultOptions or object in defaultOptions\n if (key in options) {\n const value = options[key];\n if (isPureObject(value) && isPureObject(mergedOptions[key])) {\n mergedOptions[key] = {\n ...mergedOptions[key],\n ...options[key]\n };\n }\n else {\n mergedOptions[key] = options[key];\n }\n }\n // else: No need to merge nested opts, and the initial merge already copied over the nested options\n }\n}\n/**\n * Harvest information from the url\n * @deprecated This is mainly there to support a hack in the GLTFLoader\n * TODO - baseUri should be a directory, i.e. remove file component from baseUri\n * TODO - extract extension?\n * TODO - extract query parameters?\n * TODO - should these be injected on context instead of options?\n */\nfunction addUrlOptions(options, url) {\n if (url && !('baseUri' in options)) {\n options.baseUri = url;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isObject } from \"../../javascript-utils/is-type.js\";\nimport { fetchFile } from \"../fetch/fetch-file.js\";\nimport { getGlobalLoaderOptions } from \"./option-utils.js\";\n/**\n * Gets the current fetch function from options and context\n * @param options\n * @param context\n */\nexport function getFetchFunction(options, context) {\n const globalOptions = getGlobalLoaderOptions();\n const loaderOptions = options || globalOptions;\n // options.fetch can be a function\n if (typeof loaderOptions.fetch === 'function') {\n return loaderOptions.fetch;\n }\n // options.fetch can be an options object\n if (isObject(loaderOptions.fetch)) {\n return (url) => fetchFile(url, loaderOptions.fetch);\n }\n // else refer to context (from parent loader) if available\n if (context?.fetch) {\n return context?.fetch;\n }\n // else return the default fetch function\n return fetchFile;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global' and 'is-browser';\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\nconst self_ = globals.self || globals.window || globals.global || {};\nconst window_ = globals.window || globals.self || globals.global || {};\nconst global_ = globals.global || globals.self || globals.window || {};\nconst document_ = globals.document || {};\nexport { self_ as self, window_ as window, global_ as global, document_ as document };\n/** true if running in the browser, false if running in Node.js */\nexport const isBrowser = \n// @ts-ignore process.browser\ntypeof process !== 'object' || String(process) !== '[object process]' || process.browser;\n/** true if running on a worker thread */\nexport const isWorker = typeof importScripts === 'function';\n/** true if running on a mobile device */\nexport const isMobile = typeof window !== 'undefined' && typeof window.orientation !== 'undefined';\n// Extract node major version\nconst matches = typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Version of Node.js if running under Node, otherwise 0 */\nexport const nodeVersion = (matches && parseFloat(matches[1])) || 0;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Browser polyfill for Node.js built-in `worker_threads` module.\n * These fills are non-functional, and just intended to ensure that\n * `import 'worker_threads` doesn't break browser builds.\n * The replacement is done in package.json browser field\n */\nexport class NodeWorker {\n terminate() { }\n}\nexport const parentPort = null;\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\n/** Throws an `Error` with the optional `message` if `condition` is falsy */\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'loaders.gl assertion failed.');\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nconst workerURLCache = new Map();\n/**\n * Creates a loadable URL from worker source or URL\n * that can be used to create `Worker` instances.\n * Due to CORS issues it may be necessary to wrap a URL in a small importScripts\n * @param props\n * @param props.source Worker source\n * @param props.url Worker URL\n * @returns loadable url\n */\nexport function getLoadableWorkerURL(props) {\n assert((props.source && !props.url) || (!props.source && props.url)); // Either source or url must be defined\n let workerURL = workerURLCache.get(props.source || props.url);\n if (!workerURL) {\n // Differentiate worker urls from worker source code\n if (props.url) {\n workerURL = getLoadableWorkerURLFromURL(props.url);\n workerURLCache.set(props.url, workerURL);\n }\n if (props.source) {\n workerURL = getLoadableWorkerURLFromSource(props.source);\n workerURLCache.set(props.source, workerURL);\n }\n }\n assert(workerURL);\n return workerURL;\n}\n/**\n * Build a loadable worker URL from worker URL\n * @param url\n * @returns loadable URL\n */\nfunction getLoadableWorkerURLFromURL(url) {\n // A local script url, we can use it to initialize a Worker directly\n if (!url.startsWith('http')) {\n return url;\n }\n // A remote script, we need to use `importScripts` to load from different origin\n const workerSource = buildScriptSource(url);\n return getLoadableWorkerURLFromSource(workerSource);\n}\n/**\n * Build a loadable worker URL from worker source\n * @param workerSource\n * @returns loadable url\n */\nfunction getLoadableWorkerURLFromSource(workerSource) {\n const blob = new Blob([workerSource], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n/**\n * Per spec, worker cannot be initialized with a script from a different origin\n * However a local worker script can still import scripts from other origins,\n * so we simply build a wrapper script.\n *\n * @param workerUrl\n * @returns source\n */\nfunction buildScriptSource(workerUrl) {\n return `\\\ntry {\n importScripts('${workerUrl}');\n} catch (error) {\n console.error(error);\n throw error;\n}`;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// NOTE - there is a copy of this function is both in core and loader-utils\n// core does not need all the utils in loader-utils, just this one.\n/**\n * Returns an array of Transferrable objects that can be used with postMessage\n * https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param object data to be sent via postMessage\n * @param recursive - not for application use\n * @param transfers - not for application use\n * @returns a transfer list that can be passed to postMessage\n */\nexport function getTransferList(object, recursive = true, transfers) {\n // Make sure that items in the transfer list is unique\n const transfersSet = transfers || new Set();\n if (!object) {\n // ignore\n }\n else if (isTransferable(object)) {\n transfersSet.add(object);\n }\n else if (isTransferable(object.buffer)) {\n // Typed array\n transfersSet.add(object.buffer);\n }\n else if (ArrayBuffer.isView(object)) {\n // object is a TypeArray viewing into a SharedArrayBuffer (not transferable)\n // Do not iterate through the content in this case\n }\n else if (recursive && typeof object === 'object') {\n for (const key in object) {\n // Avoid perf hit - only go one level deep\n getTransferList(object[key], recursive, transfersSet);\n }\n }\n // If transfers is defined, is internal recursive call\n // Otherwise it's called by the user\n return transfers === undefined ? Array.from(transfersSet) : [];\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Transferable\nfunction isTransferable(object) {\n if (!object) {\n return false;\n }\n if (object instanceof ArrayBuffer) {\n return true;\n }\n if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {\n return true;\n }\n if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {\n return true;\n }\n // @ts-ignore\n if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {\n return true;\n }\n return false;\n}\n/**\n * Recursively drop non serializable values like functions and regexps.\n * @param object\n */\nexport function getTransferListForWriter(object) {\n if (object === null) {\n return {};\n }\n const clone = Object.assign({}, object);\n Object.keys(clone).forEach((key) => {\n // Typed Arrays and Arrays are passed with no change\n if (typeof object[key] === 'object' &&\n !ArrayBuffer.isView(object[key]) &&\n !(object[key] instanceof Array)) {\n clone[key] = getTransferListForWriter(object[key]);\n }\n else if (typeof clone[key] === 'function' || clone[key] instanceof RegExp) {\n clone[key] = {};\n }\n else {\n clone[key] = object[key];\n }\n });\n return clone;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { NodeWorker } from \"../node/worker_threads.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { assert } from \"../env-utils/assert.js\";\nimport { getLoadableWorkerURL } from \"../worker-utils/get-loadable-worker-url.js\";\nimport { getTransferList } from \"../worker-utils/get-transfer-list.js\";\nconst NOOP = () => { };\n/**\n * Represents one worker thread\n */\nexport default class WorkerThread {\n name;\n source;\n url;\n terminated = false;\n worker;\n onMessage;\n onError;\n _loadableURL = '';\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return ((typeof Worker !== 'undefined' && isBrowser) ||\n (typeof NodeWorker !== 'undefined' && !isBrowser));\n }\n constructor(props) {\n const { name, source, url } = props;\n assert(source || url); // Either source or url must be defined\n this.name = name;\n this.source = source;\n this.url = url;\n this.onMessage = NOOP;\n this.onError = (error) => console.log(error); // eslint-disable-line\n this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();\n }\n /**\n * Terminate this worker thread\n * @note Can free up significant memory\n */\n destroy() {\n this.onMessage = NOOP;\n this.onError = NOOP;\n this.worker.terminate(); // eslint-disable-line @typescript-eslint/no-floating-promises\n this.terminated = true;\n }\n get isRunning() {\n return Boolean(this.onMessage);\n }\n /**\n * Send a message to this worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n * @param transferList If not supplied, calculated automatically by traversing data\n */\n postMessage(data, transferList) {\n transferList = transferList || getTransferList(data);\n // @ts-ignore\n this.worker.postMessage(data, transferList);\n }\n // PRIVATE\n /**\n * Generate a standard Error from an ErrorEvent\n * @param event\n */\n _getErrorFromErrorEvent(event) {\n // Note Error object does not have the expected fields if loading failed completely\n // https://developer.mozilla.org/en-US/docs/Web/API/Worker#Event_handlers\n // https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n let message = 'Failed to load ';\n message += `worker ${this.name} from ${this.url}. `;\n if (event.message) {\n message += `${event.message} in `;\n }\n // const hasFilename = event.filename && !event.filename.startsWith('blob:');\n // message += hasFilename ? event.filename : this.source.slice(0, 100);\n if (event.lineno) {\n message += `:${event.lineno}:${event.colno}`;\n }\n return new Error(message);\n }\n /**\n * Creates a worker thread on the browser\n */\n _createBrowserWorker() {\n this._loadableURL = getLoadableWorkerURL({ source: this.source, url: this.url });\n const worker = new Worker(this._loadableURL, { name: this.name });\n worker.onmessage = (event) => {\n if (!event.data) {\n this.onError(new Error('No data received'));\n }\n else {\n this.onMessage(event.data);\n }\n };\n // This callback represents an uncaught exception in the worker thread\n worker.onerror = (error) => {\n this.onError(this._getErrorFromErrorEvent(error));\n this.terminated = true;\n };\n // TODO - not clear when this would be called, for now just log in case it happens\n worker.onmessageerror = (event) => console.error(event); // eslint-disable-line\n return worker;\n }\n /**\n * Creates a worker thread in node.js\n * @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool\n */\n _createNodeWorker() {\n let worker;\n if (this.url) {\n // Make sure relative URLs start with './'\n const absolute = this.url.includes(':/') || this.url.startsWith('/');\n const url = absolute ? this.url : `./${this.url}`;\n // console.log('Starting work from', url);\n worker = new NodeWorker(url, { eval: false });\n }\n else if (this.source) {\n worker = new NodeWorker(this.source, { eval: true });\n }\n else {\n throw new Error('no worker');\n }\n worker.on('message', (data) => {\n // console.error('message', data);\n this.onMessage(data);\n });\n worker.on('error', (error) => {\n // console.error('error', error);\n this.onError(error);\n });\n worker.on('exit', (code) => {\n // console.error('exit', code);\n });\n return worker;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n name;\n workerThread;\n isRunning = true;\n /** Promise that resolves when Job is done */\n result;\n _resolve = () => { };\n _reject = () => { };\n constructor(jobName, workerThread) {\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Send a message to the job's worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n */\n postMessage(type, payload) {\n this.workerThread.postMessage({\n source: 'loaders.gl', // Lets worker ignore unrelated messages\n type,\n payload\n });\n }\n /**\n * Call to resolve the `result` Promise with the supplied value\n */\n done(value) {\n assert(this.isRunning);\n this.isRunning = false;\n this._resolve(value);\n }\n /**\n * Call to reject the `result` Promise with the supplied error\n */\n error(error) {\n assert(this.isRunning);\n this.isRunning = false;\n this._reject(error);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isMobile, isBrowser } from \"../env-utils/globals.js\";\nimport WorkerThread from \"./worker-thread.js\";\nimport WorkerJob from \"./worker-job.js\";\n/**\n * Process multiple data messages with small pool of identical workers\n */\nexport default class WorkerPool {\n name = 'unnamed';\n source; // | Function;\n url;\n maxConcurrency = 1;\n maxMobileConcurrency = 1;\n onDebug = () => { };\n reuseWorkers = true;\n props = {};\n jobQueue = [];\n idleQueue = [];\n count = 0;\n isDestroyed = false;\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return WorkerThread.isSupported();\n }\n /**\n * @param processor - worker function\n * @param maxConcurrency - max count of workers\n */\n constructor(props) {\n this.source = props.source;\n this.url = props.url;\n this.setProps(props);\n }\n /**\n * Terminates all workers in the pool\n * @note Can free up significant memory\n */\n destroy() {\n // Destroy idle workers, active Workers will be destroyed on completion\n this.idleQueue.forEach((worker) => worker.destroy());\n this.isDestroyed = true;\n }\n setProps(props) {\n this.props = { ...this.props, ...props };\n if (props.name !== undefined) {\n this.name = props.name;\n }\n if (props.maxConcurrency !== undefined) {\n this.maxConcurrency = props.maxConcurrency;\n }\n if (props.maxMobileConcurrency !== undefined) {\n this.maxMobileConcurrency = props.maxMobileConcurrency;\n }\n if (props.reuseWorkers !== undefined) {\n this.reuseWorkers = props.reuseWorkers;\n }\n if (props.onDebug !== undefined) {\n this.onDebug = props.onDebug;\n }\n }\n async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {\n // Promise resolves when thread starts working on this job\n const startPromise = new Promise((onStart) => {\n // Promise resolves when thread completes or fails working on this job\n this.jobQueue.push({ name, onMessage, onError, onStart });\n return this;\n });\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n return await startPromise;\n }\n // PRIVATE\n /**\n * Starts first queued job if worker is available or can be created\n * Called when job is started and whenever a worker returns to the idleQueue\n */\n async _startQueuedJob() {\n if (!this.jobQueue.length) {\n return;\n }\n const workerThread = this._getAvailableWorker();\n if (!workerThread) {\n return;\n }\n // We have a worker, dequeue and start the job\n const queuedJob = this.jobQueue.shift();\n if (queuedJob) {\n // Emit a debug event\n // @ts-ignore\n this.onDebug({\n message: 'Starting job',\n name: queuedJob.name,\n workerThread,\n backlog: this.jobQueue.length\n });\n // Create a worker job to let the app access thread and manage job completion\n const job = new WorkerJob(queuedJob.name, workerThread);\n // Set the worker thread's message handlers\n workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);\n workerThread.onError = (error) => queuedJob.onError(job, error);\n // Resolve the start promise so that the app can start sending messages to worker\n queuedJob.onStart(job);\n // Wait for the app to signal that the job is complete, then return worker to queue\n try {\n await job.result;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Worker exception: ${error}`);\n }\n finally {\n this.returnWorkerToQueue(workerThread);\n }\n }\n }\n /**\n * Returns a worker to the idle queue\n * Destroys the worker if\n * - pool is destroyed\n * - if this pool doesn't reuse workers\n * - if maxConcurrency has been lowered\n * @param worker\n */\n returnWorkerToQueue(worker) {\n const shouldDestroyWorker = \n // Workers on Node.js prevent the process from exiting.\n // Until we figure out how to close them before exit, we always destroy them\n !isBrowser ||\n // If the pool is destroyed, there is no reason to keep the worker around\n this.isDestroyed ||\n // If the app has disabled worker reuse, any completed workers should be destroyed\n !this.reuseWorkers ||\n // If concurrency has been lowered, this worker might be surplus to requirements\n this.count > this._getMaxConcurrency();\n if (shouldDestroyWorker) {\n worker.destroy();\n this.count--;\n }\n else {\n this.idleQueue.push(worker);\n }\n if (!this.isDestroyed) {\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n /**\n * Returns idle worker or creates new worker if maxConcurrency has not been reached\n */\n _getAvailableWorker() {\n // If a worker has completed and returned to the queue, it can be used\n if (this.idleQueue.length > 0) {\n return this.idleQueue.shift() || null;\n }\n // Create fresh worker if we haven't yet created the max amount of worker threads for this worker source\n if (this.count < this._getMaxConcurrency()) {\n this.count++;\n const name = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;\n return new WorkerThread({ name, source: this.source, url: this.url });\n }\n // No worker available, have to wait\n return null;\n }\n _getMaxConcurrency() {\n return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport WorkerPool from \"./worker-pool.js\";\nimport WorkerThread from \"./worker-thread.js\";\nconst DEFAULT_PROPS = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => { }\n};\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n props;\n workerPools = new Map();\n // singleton\n static _workerFarm;\n /** Checks if workers are supported on this platform */\n static isSupported() {\n return WorkerThread.isSupported();\n }\n /** Get the singleton instance of the global worker farm */\n static getWorkerFarm(props = {}) {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n WorkerFarm._workerFarm.setProps(props);\n return WorkerFarm._workerFarm;\n }\n /** get global instance with WorkerFarm.getWorkerFarm() */\n constructor(props) {\n this.props = { ...DEFAULT_PROPS };\n this.setProps(props);\n /** @type Map} */\n this.workerPools = new Map();\n }\n /**\n * Terminate all workers in the farm\n * @note Can free up significant memory\n */\n destroy() {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n this.workerPools = new Map();\n }\n /**\n * Set props used when initializing worker pools\n * @param props\n */\n setProps(props) {\n this.props = { ...this.props, ...props };\n // Update worker pool props\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n /**\n * Returns a worker pool for the specified worker\n * @param options - only used first time for a specific worker name\n * @param options.name - the name of the worker - used to identify worker pool\n * @param options.url -\n * @param options.source -\n * @example\n * const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n */\n getWorkerPool(options) {\n const { name, source, url } = options;\n let workerPool = this.workerPools.get(name);\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n return workerPool;\n }\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n/**\n * TODO - unpkg.com doesn't seem to have a `latest` specifier for alpha releases...\n * 'beta' on beta branch, 'latest' on prod branch\n */\nexport const NPM_TAG = 'latest';\nfunction getVersion() {\n if (!globalThis._loadersgl_?.version) {\n globalThis._loadersgl_ = globalThis._loadersgl_ || {};\n // __VERSION__ is injected by babel-plugin-version-inline\n if (typeof \"4.2.1\" === 'undefined') {\n // eslint-disable-next-line\n console.warn('loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.');\n globalThis._loadersgl_.version = NPM_TAG;\n }\n else {\n globalThis._loadersgl_.version = \"4.2.1\";\n }\n }\n return globalThis._loadersgl_.version;\n}\nexport const VERSION = getVersion();\n","import { isBrowser } from '@loaders.gl/worker-utils';\nimport { WorkerFarm, getWorkerURL } from '@loaders.gl/worker-utils';\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader, options) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n // Node workers are still experimental\n if (!isBrowser && !options?._nodeWorkers) {\n return false;\n }\n return loader.worker && options?.worker;\n}\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(loader, data, options, context, parseOnMainThread) {\n const name = loader.id; // TODO\n const url = getWorkerURL(loader, options);\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({ name, url });\n // options.log object contains functions which cannot be transferred\n // context.fetch & context.parse functions cannot be transferred\n // TODO - decide how to handle logging on workers\n options = JSON.parse(JSON.stringify(options));\n context = JSON.parse(JSON.stringify(context || {}));\n const job = await workerPool.startJob('process-on-worker', \n // @ts-expect-error\n onMessage.bind(null, parseOnMainThread) // eslint-disable-line @typescript-eslint/no-misused-promises\n );\n job.postMessage('process', {\n // @ts-ignore\n input: data,\n options,\n context\n });\n const result = await job.result;\n // TODO - what is going on here?\n return await result.result;\n}\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(parseOnMainThread, job, type, payload) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n case 'error':\n job.error(new Error(payload.error));\n break;\n case 'process':\n // Worker is asking for main thread to parseO\n const { id, input, options } = payload;\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', { id, result });\n }\n catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', { id, error: message });\n }\n break;\n default:\n // eslint-disable-next-line\n console.warn(`parse-with-worker unknown message ${type}`);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { isBrowser } from \"../env-utils/globals.js\";\nimport { VERSION, NPM_TAG } from \"../env-utils/version.js\";\n/**\n * Gets worker object's name (for debugging in Chrome thread inspector window)\n */\nexport function getWorkerName(worker) {\n const warning = worker.version !== VERSION ? ` (worker-utils@${VERSION})` : '';\n return `${worker.name}@${worker.version}${warning}`;\n}\n/**\n * Generate a worker URL based on worker object and options\n * @returns A URL to one of the following:\n * - a published worker on unpkg CDN\n * - a local test worker\n * - a URL provided by the user in options\n */\nexport function getWorkerURL(worker, options = {}) {\n const workerOptions = options[worker.id] || {};\n const workerFile = isBrowser ? `${worker.id}-worker.js` : `${worker.id}-worker-node.js`;\n let url = workerOptions.workerUrl;\n // HACK: Allow for non-nested workerUrl for the CompressionWorker.\n // For the compression worker, workerOptions is currently not nested correctly. For most loaders,\n // you'd have options within an object, i.e. `{mvt: {coordinates: ...}}` but the CompressionWorker\n // puts options at the top level, not within a `compression` key (its `id`). For this reason, the\n // above `workerOptions` will always be a string (i.e. `'gzip'`) for the CompressionWorker. To not\n // break backwards compatibility, we allow the CompressionWorker to have options at the top level.\n if (!url && worker.id === 'compression') {\n url = options.workerUrl;\n }\n // If URL is test, generate local loaders.gl url\n // @ts-ignore _workerType\n if (options._workerType === 'test') {\n if (isBrowser) {\n url = `modules/${worker.module}/dist/${workerFile}`;\n }\n else {\n // In the test environment the ts-node loader requires TypeScript code\n url = `modules/${worker.module}/src/workers/${worker.id}-worker-node.ts`;\n }\n }\n // If url override is not provided, generate a URL to published version on npm CDN unpkg.com\n if (!url) {\n // GENERATE\n let version = worker.version;\n // On master we need to load npm alpha releases published with the `beta` tag\n if (version === 'latest') {\n // throw new Error('latest worker version specified');\n version = NPM_TAG;\n }\n const versionTag = version ? `@${version}` : '';\n url = `https://unpkg.com/@loaders.gl/${worker.module}${versionTag}/dist/${workerFile}`;\n }\n assert(url);\n // Allow user to override location\n return url;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n *\n * @param baseOptions Can be undefined, in which case a fresh options object will be minted\n * @param newOptions\n * @returns\n */\nexport function mergeLoaderOptions(baseOptions, newOptions) {\n return mergeOptionsRecursively(baseOptions || {}, newOptions);\n}\nfunction mergeOptionsRecursively(baseOptions, newOptions, level = 0) {\n // Sanity check (jest test runner overwrites the console object which can lead to infinite recursion)\n if (level > 3) {\n return newOptions;\n }\n const options = { ...baseOptions };\n for (const [key, newValue] of Object.entries(newOptions)) {\n if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) {\n options[key] = mergeOptionsRecursively(options[key] || {}, newOptions[key], level + 1);\n // Object.assign(options[key] as object, newOptions[key]);\n }\n else {\n options[key] = newOptions[key];\n }\n }\n return options;\n}\n","/**\n * compare two binary arrays for equality\n * @param a\n * @param b\n * @param byteLength\n */\nexport function compareArrayBuffers(arrayBuffer1, arrayBuffer2, byteLength) {\n byteLength = byteLength || arrayBuffer1.byteLength;\n if (arrayBuffer1.byteLength < byteLength || arrayBuffer2.byteLength < byteLength) {\n return false;\n }\n const array1 = new Uint8Array(arrayBuffer1);\n const array2 = new Uint8Array(arrayBuffer2);\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Concatenate a sequence of ArrayBuffers from arguments\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffers(...sources) {\n return concatenateArrayBuffersFromArray(sources);\n}\n/**\n * Concatenate a sequence of ArrayBuffers from array\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffersFromArray(sources) {\n // Make sure all inputs are wrapped in typed arrays\n const sourceArrays = sources.map((source2) => source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2);\n // Get length of all inputs\n const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);\n // Allocate array with space for all inputs\n const result = new Uint8Array(byteLength);\n // Copy the subarrays\n let offset = 0;\n for (const sourceArray of sourceArrays) {\n result.set(sourceArray, offset);\n offset += sourceArray.byteLength;\n }\n // We work with ArrayBuffers, discard the typed array wrapper\n return result.buffer;\n}\n/**\n * Concatenate arbitrary count of typed arrays\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays\n * @param - list of arrays. All arrays should be the same type\n * @return A concatenated TypedArray\n */\nexport function concatenateTypedArrays(...typedArrays) {\n // @ts-ignore\n const arrays = typedArrays;\n // @ts-ignore\n const TypedArrayConstructor = (arrays && arrays.length > 1 && arrays[0].constructor) || null;\n if (!TypedArrayConstructor) {\n throw new Error('\"concatenateTypedArrays\" - incorrect quantity of arguments or arguments have incompatible data types');\n }\n const sumLength = arrays.reduce((acc, value) => acc + value.length, 0);\n // @ts-ignore typescript does not like dynamic constructors\n const result = new TypedArrayConstructor(sumLength);\n let offset = 0;\n for (const array of arrays) {\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n}\n/**\n * Copy a view of an ArrayBuffer into new ArrayBuffer with byteOffset = 0\n * @param arrayBuffer\n * @param byteOffset\n * @param byteLength\n */\nexport function sliceArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n const subArray = byteLength !== undefined\n ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength)\n : new Uint8Array(arrayBuffer).subarray(byteOffset);\n const arrayCopy = new Uint8Array(subArray);\n return arrayCopy.buffer;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big string into chunks and yields them one-by-one as ArrayBuffers\n * @param blob string to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeStringIterator(string, options) {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n const textEncoder = new TextEncoder();\n while (offset < string.length) {\n // Create a chunk of the right size\n const chunkLength = Math.min(string.length - offset, chunkSize);\n const chunk = string.slice(offset, offset + chunkLength);\n offset += chunkLength;\n // yield an ArrayBuffer chunk\n yield textEncoder.encode(chunk);\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n/**\n * Returns an iterator that breaks a big ArrayBuffer into chunks and yields them one-by-one\n * @param blob ArrayBuffer to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeArrayBufferIterator(arrayBuffer, options = {}) {\n const { chunkSize = DEFAULT_CHUNK_SIZE } = options;\n let byteOffset = 0;\n while (byteOffset < arrayBuffer.byteLength) {\n // Create a chunk of the right size\n const chunkByteLength = Math.min(arrayBuffer.byteLength - byteOffset, chunkSize);\n const chunk = new ArrayBuffer(chunkByteLength);\n // Copy data from the big chunk\n const sourceArray = new Uint8Array(arrayBuffer, byteOffset, chunkByteLength);\n const chunkArray = new Uint8Array(chunk);\n chunkArray.set(sourceArray);\n // yield the chunk\n byteOffset += chunkByteLength;\n yield chunk;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024; // 1MB — biggest value that keeps UI responsive\n/**\n * Returns an iterator that breaks a big Blob into chunks and yields them one-by-one\n * @param blob Blob or File object\n * @param options\n * @param options.chunkSize\n */\nexport async function* makeBlobIterator(blob, options) {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n let offset = 0;\n while (offset < blob.size) {\n const end = offset + chunkSize;\n const chunk = await blob.slice(offset, end).arrayBuffer();\n offset = end;\n yield chunk;\n }\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport * as node from \"../node/buffer.js\";\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value) {\n return value && typeof value === 'object' && value.isBuffer;\n}\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data) {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\n/**\n * Convert an object to an array buffer\n */\nexport function toArrayBuffer(data) {\n // Note: Should be called first, Buffers can trigger other detections below\n if (isBuffer(data)) {\n return node.toArrayBuffer(data);\n }\n if (data instanceof ArrayBuffer) {\n return data;\n }\n // Careful - Node Buffers look like Uint8Arrays (keep after isBuffer)\n if (ArrayBuffer.isView(data)) {\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n }\n if (typeof data === 'string') {\n const text = data;\n const uint8Array = new TextEncoder().encode(text);\n return uint8Array.buffer;\n }\n // HACK to support Blob polyfill\n if (data && typeof data === 'object' && data._toArrayBuffer) {\n return data._toArrayBuffer();\n }\n throw new Error('toArrayBuffer');\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';\n/**\n * Returns an async iterable that reads from a stream (works in both Node.js and browsers)\n * @param stream stream to iterator over\n */\nexport function makeStreamIterator(stream, options) {\n return isBrowser\n ? makeBrowserStreamIterator(stream, options)\n : makeNodeStreamIterator(stream, options);\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @see https://jakearchibald.com/2017/async-iterators-and-generators/#making-streams-iterate\n */\nasync function* makeBrowserStreamIterator(stream, options) {\n // WhatWG: stream is supposed to have a `getIterator` method\n // if (typeof stream.getIterator === 'function') {\n // return stream.getIterator();\n // }\n // if (typeof stream[Symbol.asyncIterator] === 'function') {\n // return makeToArrayBufferIterator(stream);\n // }\n // In the browser, we first need to get a lock on the stream\n const reader = stream.getReader();\n let nextBatchPromise;\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentBatchPromise = nextBatchPromise || reader.read();\n // Issue a read for an additional batch, while we await the next batch\n // Idea is to make fetching happen in parallel with processing / parsing\n if (options?._streamReadAhead) {\n nextBatchPromise = reader.read();\n }\n // Read from the stream\n // value is a Uint8Array\n const { done, value } = await currentBatchPromise;\n // Exit if we're done\n if (done) {\n return;\n }\n // Else yield the chunk\n yield toArrayBuffer(value);\n }\n }\n catch (error) {\n // TODO - examples makes it look like this should always be called,\n // but that generates exceptions so only call it if we do not reach the end\n reader.releaseLock();\n }\n}\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @note Requires Node.js >= 10\n */\nasync function* makeNodeStreamIterator(stream, options) {\n // Hacky test for node version to ensure we don't call bad polyfills\n // NODE 10+: stream is an asyncIterator\n for await (const chunk of stream) {\n yield toArrayBuffer(chunk); // Coerce each chunk to ArrayBuffer\n }\n}\n/* TODO - remove NODE < 10\n * @see https://github.com/bustle/streaming-iterables, MIT license\n *\n if (typeof stream[Symbol.asyncIterator] === 'function') {\n return;\n }\n\n // TODO - check if is this ever used in Node 10+?\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const data = stream.read();\n if (data !== null) {\n yield toArrayBuffer(data);\n // eslint-disable-next-line no-continue\n continue;\n }\n if (stream._readableState?.ended) {\n return;\n }\n await onceReadable(stream);\n }\n\nasync function onceReadable(stream: Readable): Promise {\n return new Promise((resolve) => {\n stream.once('readable', resolve);\n });\n}\n */\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { makeStringIterator } from \"./make-string-iterator.js\";\nimport { makeArrayBufferIterator } from \"./make-array-buffer-iterator.js\";\nimport { makeBlobIterator } from \"./make-blob-iterator.js\";\nimport { makeStreamIterator } from \"./make-stream-iterator.js\";\nimport { isBlob, isReadableStream, isResponse } from \"../../javascript-utils/is-type.js\";\n/**\n * Returns an iterator that breaks its input into chunks and yields them one-by-one.\n * @param data\n * @param options\n * @returns\n * This function can e.g. be used to enable data sources that can only be read atomically\n * (such as `Blob` and `File` via `FileReader`) to still be parsed in batches.\n */\nexport function makeIterator(data, options) {\n if (typeof data === 'string') {\n // Note: Converts string chunks to binary\n return makeStringIterator(data, options);\n }\n if (data instanceof ArrayBuffer) {\n return makeArrayBufferIterator(data, options);\n }\n if (isBlob(data)) {\n return makeBlobIterator(data, options);\n }\n if (isReadableStream(data)) {\n return makeStreamIterator(data, options);\n }\n if (isResponse(data)) {\n const response = data;\n return makeStreamIterator(response.body, options);\n }\n throw new Error('makeIterator');\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';\nimport { isResponse, isReadableStream, isAsyncIterable, isIterable, isIterator, isBlob, isBuffer } from \"../../javascript-utils/is-type.js\";\nimport { makeIterator } from \"../../iterators/make-iterator/make-iterator.js\";\nimport { checkResponse, makeResponse } from \"../utils/response-utils.js\";\nconst ERR_DATA = 'Cannot convert supplied data type';\n// eslint-disable-next-line complexity\nexport function getArrayBufferOrStringFromDataSync(data, loader, options) {\n if (loader.text && typeof data === 'string') {\n return data;\n }\n if (isBuffer(data)) {\n // @ts-ignore\n data = data.buffer;\n }\n if (data instanceof ArrayBuffer) {\n const arrayBuffer = data;\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(arrayBuffer);\n }\n return arrayBuffer;\n }\n // We may need to handle offsets\n if (ArrayBuffer.isView(data)) {\n // TextDecoder is invoked on typed arrays and will handle offsets\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(data);\n }\n let arrayBuffer = data.buffer;\n // Since we are returning the underlying arrayBuffer, we must create a new copy\n // if this typed array / Buffer is a partial view into the ArryayBuffer\n // TODO - this is a potentially unnecessary copy\n const byteLength = data.byteLength || data.length;\n if (data.byteOffset !== 0 || byteLength !== arrayBuffer.byteLength) {\n // console.warn(`loaders.gl copying arraybuffer of length ${byteLength}`);\n arrayBuffer = arrayBuffer.slice(data.byteOffset, data.byteOffset + byteLength);\n }\n return arrayBuffer;\n }\n throw new Error(ERR_DATA);\n}\n// Convert async iterator to a promise\nexport async function getArrayBufferOrStringFromData(data, loader, options) {\n const isArrayBuffer = data instanceof ArrayBuffer || ArrayBuffer.isView(data);\n if (typeof data === 'string' || isArrayBuffer) {\n return getArrayBufferOrStringFromDataSync(data, loader, options);\n }\n // Blobs and files are FileReader compatible\n if (isBlob(data)) {\n data = await makeResponse(data);\n }\n if (isResponse(data)) {\n const response = data;\n await checkResponse(response);\n return loader.binary ? await response.arrayBuffer() : await response.text();\n }\n if (isReadableStream(data)) {\n // @ts-expect-error TS2559 options type\n data = makeIterator(data, options);\n }\n if (isIterable(data) || isAsyncIterable(data)) {\n // Assume arrayBuffer iterator - attempt to concatenate\n return concatenateArrayBuffersAsync(data);\n }\n throw new Error(ERR_DATA);\n}\nexport async function getAsyncIterableFromData(data, options) {\n if (isIterator(data)) {\n return data;\n }\n if (isResponse(data)) {\n const response = data;\n // Note Since this function is not async, we currently can't load error message, just status\n await checkResponse(response);\n // TODO - bug in polyfill, body can be a Promise under Node.js\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const body = await response.body;\n // TODO - body can be null?\n return makeIterator(body, options);\n }\n if (isBlob(data) || isReadableStream(data)) {\n return makeIterator(data, options);\n }\n if (isAsyncIterable(data)) {\n return data;\n }\n return getIterableFromData(data);\n}\nexport async function getReadableStream(data) {\n if (isReadableStream(data)) {\n return data;\n }\n if (isResponse(data)) {\n // @ts-ignore\n return data.body;\n }\n const response = await makeResponse(data);\n // @ts-ignore\n return response.body;\n}\n// HELPERS\nfunction getIterableFromData(data) {\n // generate an iterator that emits a single chunk\n if (ArrayBuffer.isView(data)) {\n return (function* oneChunk() {\n yield data.buffer;\n })();\n }\n if (data instanceof ArrayBuffer) {\n return (function* oneChunk() {\n yield data;\n })();\n }\n if (isIterator(data)) {\n return data;\n }\n if (isIterable(data)) {\n return data[Symbol.iterator]();\n }\n throw new Error(ERR_DATA);\n}\n","import { concatenateArrayBuffers } from \"../binary-utils/array-buffer-utils.js\";\n// GENERAL UTILITIES\n/**\n * Iterate over async iterator, without resetting iterator if end is not reached\n * - forEach intentionally does not reset iterator if exiting loop prematurely\n * so that iteration can continue in a second loop\n * - It is recommended to use a standard for-await as last loop to ensure\n * iterator gets properly reset\n *\n * TODO - optimize using sync iteration if argument is an Iterable?\n *\n * @param iterator\n * @param visitor\n */\nexport async function forEach(iterator, visitor) {\n // eslint-disable-next-line\n while (true) {\n const { done, value } = await iterator.next();\n if (done) {\n iterator.return();\n return;\n }\n const cancel = visitor(value);\n if (cancel) {\n return;\n }\n }\n}\n// Breaking big data into iterable chunks, concatenating iterable chunks into big data objects\n/**\n * Concatenates all data chunks yielded by an (async) iterator\n * This function can e.g. be used to enable atomic parsers to work on (async) iterator inputs\n */\nexport async function concatenateArrayBuffersAsync(asyncIterator) {\n const arrayBuffers = [];\n for await (const chunk of asyncIterator) {\n arrayBuffers.push(chunk);\n }\n return concatenateArrayBuffers(...arrayBuffers);\n}\nexport async function concatenateStringsAsync(asyncIterator) {\n const strings = [];\n for await (const chunk of asyncIterator) {\n strings.push(chunk);\n }\n return strings.join('');\n}\n","// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\nimport { getCWD } from \"./get-cwd.js\";\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url) {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(slashIndex + 1) : '';\n}\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url) {\n const slashIndex = url ? url.lastIndexOf('/') : -1;\n return slashIndex >= 0 ? url.substr(0, slashIndex) : '';\n}\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts) {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n/* eslint-disable no-continue */\n/**\n * https://nodejs.org/api/path.html#path_path_resolve_paths\n * @param paths A sequence of paths or path segments.\n * @return resolved path\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\nexport function resolve(...components) {\n const paths = [];\n for (let _i = 0; _i < components.length; _i++) {\n paths[_i] = components[_i];\n }\n let resolvedPath = '';\n let resolvedAbsolute = false;\n let cwd;\n for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path;\n if (i >= 0) {\n path = paths[i];\n }\n else {\n if (cwd === undefined) {\n cwd = getCWD();\n }\n path = cwd;\n }\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path (removes leading slash)\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n else if (resolvedPath.length > 0) {\n return resolvedPath;\n }\n return '.';\n}\nconst SLASH = 47;\nconst DOT = 46;\n/**\n * Resolves . and .. elements in a path with directory names\n * Forked from BTOdell/path-resolve under MIT license\n * @see https://github.com/BTOdell/path-resolve/blob/master/LICENSE\n */\n/* eslint-disable max-depth */\n// eslint-disable-next-line complexity, max-statements\nfunction normalizeStringPosix(path, allowAboveRoot) {\n let res = '';\n let lastSlash = -1;\n let dots = 0;\n let code;\n let isAboveRoot = false;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n }\n else if (code === SLASH) {\n break;\n }\n else {\n code = SLASH;\n }\n if (code === SLASH) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 ||\n !isAboveRoot ||\n res.charCodeAt(res.length - 1) !== DOT ||\n res.charCodeAt(res.length - 2) !== DOT) {\n if (res.length > 2) {\n const start = res.length - 1;\n let j = start;\n for (; j >= 0; --j) {\n if (res.charCodeAt(j) === SLASH) {\n break;\n }\n }\n if (j !== start) {\n res = j === -1 ? '' : res.slice(0, j);\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n }\n else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSlash = i;\n dots = 0;\n isAboveRoot = false;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += '/..';\n }\n else {\n res = '..';\n }\n isAboveRoot = true;\n }\n }\n else {\n const slice = path.slice(lastSlash + 1, i);\n if (res.length > 0) {\n res += `/${slice}`;\n }\n else {\n res = slice;\n }\n isAboveRoot = false;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === DOT && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getFetchFunction } from \"./get-fetch-function.js\";\nimport { extractQueryString, stripQueryString } from \"../utils/url-utils.js\";\nimport { path } from '@loaders.gl/loader-utils';\n/**\n * \"sub\" loaders invoked by other loaders get a \"context\" injected on `this`\n * The context will inject core methods like `parse` and contain information\n * about loaders and options passed in to the top-level `parse` call.\n *\n * @param context\n * @param options\n * @param previousContext\n */\nexport function getLoaderContext(context, options, parentContext) {\n // For recursive calls, we already have a context\n // TODO - add any additional loaders to context?\n if (parentContext) {\n return parentContext;\n }\n const newContext = {\n fetch: getFetchFunction(options, context),\n ...context\n };\n // Parse URLs so that subloaders can easily generate correct strings\n if (newContext.url) {\n const baseUrl = stripQueryString(newContext.url);\n newContext.baseUrl = baseUrl;\n newContext.queryString = extractQueryString(newContext.url);\n newContext.filename = path.filename(baseUrl);\n newContext.baseUrl = path.dirname(baseUrl);\n }\n // Recursive loading does not use single loader\n if (!Array.isArray(newContext.loaders)) {\n newContext.loaders = null;\n }\n return newContext;\n}\n// eslint-disable-next-line complexity\nexport function getLoadersFromContext(loaders, context) {\n // A single loader (non-array) indicates no selection desired. Force select.\n if (loaders && !Array.isArray(loaders)) {\n return loaders;\n }\n // Create a merged list\n let candidateLoaders;\n if (loaders) {\n candidateLoaders = Array.isArray(loaders) ? loaders : [loaders];\n }\n if (context && context.loaders) {\n const contextLoaders = Array.isArray(context.loaders) ? context.loaders : [context.loaders];\n candidateLoaders = candidateLoaders ? [...candidateLoaders, ...contextLoaders] : contextLoaders;\n }\n // If no loaders, return null to look in globally registered loaders\n return candidateLoaders && candidateLoaders.length ? candidateLoaders : undefined;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log } from '@probe.gl/log';\nexport const log = new Log({ id: 'loaders.gl' });\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { getGlobalLoaderState } from \"../loader-utils/option-utils.js\";\n/**\n * Store global registered loaders on the global object to increase chances of cross loaders-version interoperability\n * This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n */\nconst getGlobalLoaderRegistry = () => {\n const state = getGlobalLoaderState();\n state.loaderRegistry = state.loaderRegistry || [];\n return state.loaderRegistry;\n};\n/** Register a list of global loaders */\nexport function registerLoaders(loaders) {\n const loaderRegistry = getGlobalLoaderRegistry();\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n for (const loader of loaders) {\n const normalizedLoader = normalizeLoader(loader);\n if (!loaderRegistry.find((registeredLoader) => normalizedLoader === registeredLoader)) {\n // add to the beginning of the loaderRegistry, so the last registeredLoader get picked\n loaderRegistry.unshift(normalizedLoader);\n }\n }\n}\nexport function getRegisteredLoaders() {\n return getGlobalLoaderRegistry();\n}\n/** @deprecated For testing only */\nexport function _unregisterLoaders() {\n const state = getGlobalLoaderState();\n state.loaderRegistry = [];\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { compareArrayBuffers, path } from '@loaders.gl/loader-utils';\nimport { normalizeLoader } from \"../loader-utils/normalize-loader.js\";\nimport { log } from \"../utils/log.js\";\nimport { getResourceUrl, getResourceMIMEType } from \"../utils/resource-utils.js\";\nimport { compareMIMETypes } from \"../utils/mime-type-utils.js\";\nimport { getRegisteredLoaders } from \"./register-loaders.js\";\nimport { isBlob } from \"../../javascript-utils/is-type.js\";\nimport { stripQueryString } from \"../utils/url-utils.js\";\nconst EXT_PATTERN = /\\.([^.]+)$/;\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, { ...options, nothrow: true }, context);\n if (loader) {\n return loader;\n }\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await data.slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n return loader;\n}\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(data, loaders = [], options, context) {\n if (!validHTTPResponse(data)) {\n return null;\n }\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n return loader;\n}\n/** Implements loaders selection logic */\n// eslint-disable-next-line complexity\nfunction selectLoaderInternal(data, loaders, options, context) {\n const url = getResourceUrl(data);\n const type = getResourceMIMEType(data);\n const testUrl = stripQueryString(url) || context?.url;\n let loader = null;\n let reason = '';\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n reason = `match forced by supplied MIME type ${options?.mimeType}`;\n }\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? `matched url ${testUrl}` : '');\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? `matched MIME type ${type}` : '');\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n // @ts-ignore Blob | Response\n loader = loader || findLoaderByInitialBytes(loaders, data);\n // @ts-ignore Blob | Response\n reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n // Look up loader by fallback mime type\n if (options?.fallbackMimeType) {\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n }\n if (reason) {\n log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n }\n return loader;\n}\n/** Check HTTP Response */\nfunction validHTTPResponse(data) {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data) {\n const url = getResourceUrl(data);\n const type = getResourceMIMEType(data);\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n // @ts-ignore Blob | Response\n const firstCharacters = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\nfunction normalizeLoaders(loaders) {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders, url) {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\nfunction findLoaderByExtension(loaders, extension) {\n extension = extension.toLowerCase();\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes?.some((mimeType1) => compareMIMETypes(mimeType, mimeType1))) {\n return loader;\n }\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (compareMIMETypes(mimeType, `application/x.${loader.id}`)) {\n return loader;\n }\n }\n return null;\n}\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n }\n else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n }\n else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data);\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n default:\n return false;\n }\n}\nfunction getFirstCharacters(data, length = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n }\n else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n }\n else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { parseWithWorker, canParseWithWorker } from '@loaders.gl/loader-utils';\nimport { assert, validateWorkerVersion } from '@loaders.gl/worker-utils';\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { isResponse } from \"../../javascript-utils/is-type.js\";\nimport { normalizeOptions } from \"../loader-utils/option-utils.js\";\nimport { mergeLoaderOptions } from '@loaders.gl/loader-utils';\nimport { getArrayBufferOrStringFromData } from \"../loader-utils/get-data.js\";\nimport { getLoaderContext, getLoadersFromContext } from \"../loader-utils/loader-context.js\";\nimport { getResourceUrl } from \"../utils/resource-utils.js\";\nimport { selectLoader } from \"./select-loader.js\";\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\n// implementation signature\nexport async function parse(data, loaders, options, context) {\n // Signature: parse(data, options, context | url)\n // Uses registered loaders\n if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders;\n loaders = undefined;\n }\n data = await data; // Resolve any promise\n options = options || {}; // Could be invalid...\n // Extract a url for auto detection\n const url = getResourceUrl(data);\n // Chooses a loader (and normalizes it)\n // Also use any loaders in the context, new loaders take priority\n const typedLoaders = loaders;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n // todo hacky type cast\n const loader = await selectLoader(data, candidateLoaders, options);\n // Note: if no loader was found, if so just return null\n if (!loader) {\n return null;\n }\n // Normalize options\n // @ts-expect-error\n options = normalizeOptions(options, loader, candidateLoaders, url); // Could be invalid...\n // Get a context (if already present, will be unchanged)\n context = getLoaderContext(\n // @ts-expect-error\n { url, _parse: parse, loaders: candidateLoaders }, options, context || null);\n return await parseWithLoader(loader, data, options, context);\n}\n// TODO: support progress and abort\n// TODO - should accept loader.parseAsyncIterator and concatenate.\nasync function parseWithLoader(loader, data, options, context) {\n validateWorkerVersion(loader);\n options = mergeLoaderOptions(loader.options, options);\n if (isResponse(data)) {\n // Serialize to support passing the response to web worker\n const response = data;\n const { ok, redirected, status, statusText, type, url } = response;\n const headers = Object.fromEntries(response.headers.entries());\n // @ts-expect-error TODO - fix this\n context.response = { headers, ok, redirected, status, statusText, type, url };\n }\n data = await getArrayBufferOrStringFromData(data, loader, options);\n const loaderWithParser = loader;\n // First check for synchronous text parser, wrap results in promises\n if (loaderWithParser.parseTextSync && typeof data === 'string') {\n return loaderWithParser.parseTextSync(data, options, context);\n }\n // If we have a workerUrl and the loader can parse the given options efficiently in a worker\n if (canParseWithWorker(loader, options)) {\n return await parseWithWorker(loader, data, options, context, parse);\n }\n // Check for asynchronous parser\n if (loaderWithParser.parseText && typeof data === 'string') {\n return await loaderWithParser.parseText(data, options, context);\n }\n if (loaderWithParser.parse) {\n return await loaderWithParser.parse(data, options, context);\n }\n // This should not happen, all sync loaders should also offer `parse` function\n assert(!loaderWithParser.parseSync);\n // TBD - If asynchronous parser not available, return null\n throw new Error(`${loader.id} loader - no parser found and worker is disabled`);\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../env-utils/assert.js\";\nimport { VERSION } from \"../env-utils/version.js\";\n/**\n * Check if worker is compatible with this library version\n * @param worker\n * @param libVersion\n * @returns `true` if the two versions are compatible\n */\nexport function validateWorkerVersion(worker, coreVersion = VERSION) {\n assert(worker, 'no worker provided');\n const workerVersion = worker.version;\n if (!coreVersion || !workerVersion) {\n return false;\n }\n // TODO enable when fix the __version__ injection\n // const coreVersions = parseVersion(coreVersion);\n // const workerVersions = parseVersion(workerVersion);\n // assert(\n // coreVersion.major === workerVersion.major && coreVersion.minor <= workerVersion.minor,\n // `worker: ${worker.name} is not compatible. ${coreVersion.major}.${\n // coreVersion.minor\n // }+ is required.`\n // );\n return true;\n}\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction parseVersion(version) {\n const parts = version.split('.').map(Number);\n return { major: parts[0], minor: parts[1] };\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBlob } from \"../../javascript-utils/is-type.js\";\nimport { isLoaderObject } from \"../loader-utils/normalize-loader.js\";\nimport { getFetchFunction } from \"../loader-utils/get-fetch-function.js\";\nimport { parse } from \"./parse.js\";\n// implementation signature\nexport async function load(url, loaders, options, context) {\n let resolvedLoaders;\n let resolvedOptions;\n // Signature: load(url, options)\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n resolvedLoaders = [];\n resolvedOptions = loaders;\n context = undefined; // context not supported in short signature\n }\n else {\n resolvedLoaders = loaders;\n resolvedOptions = options;\n }\n // Select fetch function\n const fetch = getFetchFunction(resolvedOptions);\n // at this point, `url` could be already loaded binary data\n let data = url;\n // url is a string, fetch the url\n if (typeof url === 'string') {\n data = await fetch(url);\n // URL is Blob or File, fetchFile handles it (alt: we could generate ObjectURL here)\n }\n if (isBlob(url)) {\n // The fetch response object will contain blob.name\n // @ts-expect-error TODO - This may not work for overridden fetch functions\n data = await fetch(url);\n }\n // Data is loaded (at least we have a `Response` object) so time to hand over to `parse`\n // return await parse(data, loaders as Loader[], options);\n return Array.isArray(resolvedLoaders)\n ? await parse(data, resolvedLoaders, resolvedOptions) // loader array overload\n : await parse(data, resolvedLoaders, resolvedOptions); // single loader overload\n}\n","import { load } from '@loaders.gl/core';\nexport default class Resource {\n constructor(id, data, context) {\n this._loadCount = 0;\n this._subscribers = new Set();\n this.id = id;\n this.context = context;\n this.setData(data);\n }\n // consumer: {onChange: Function}\n subscribe(consumer) {\n this._subscribers.add(consumer);\n }\n unsubscribe(consumer) {\n this._subscribers.delete(consumer);\n }\n inUse() {\n return this._subscribers.size > 0;\n }\n delete() {\n // Remove any resources created\n }\n getData() {\n return this.isLoaded\n ? this._error\n ? Promise.reject(this._error)\n : this._content\n : this._loader.then(() => this.getData());\n }\n setData(data, forceUpdate) {\n if (data === this._data && !forceUpdate) {\n return;\n }\n this._data = data;\n const loadCount = ++this._loadCount;\n let loader = data;\n if (typeof data === 'string') {\n loader = load(data);\n }\n if (loader instanceof Promise) {\n this.isLoaded = false;\n this._loader = loader\n .then(result => {\n // check if source has changed\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = undefined;\n this._content = result;\n }\n })\n .catch(error => {\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = error || true;\n }\n });\n }\n else {\n this.isLoaded = true;\n this._error = undefined;\n this._content = data;\n }\n for (const subscriber of this._subscribers) {\n subscriber.onChange(this.getData());\n }\n }\n}\n","import Resource from \"./resource.js\";\nexport default class ResourceManager {\n constructor(props) {\n this.protocol = props.protocol || 'resource://';\n this._context = {\n device: props.device,\n // @ts-expect-error\n gl: props.device?.gl,\n resourceManager: this\n };\n this._resources = {};\n this._consumers = {};\n this._pruneRequest = null;\n }\n contains(resourceId) {\n if (resourceId.startsWith(this.protocol)) {\n return true;\n }\n return resourceId in this._resources;\n }\n add({ resourceId, data, forceUpdate = false, persistent = true }) {\n let res = this._resources[resourceId];\n if (res) {\n res.setData(data, forceUpdate);\n }\n else {\n res = new Resource(resourceId, data, this._context);\n this._resources[resourceId] = res;\n }\n // persistent resources can only be removed by calling `remove`\n // non-persistent resources may be released when there are no more consumers\n res.persistent = persistent;\n }\n remove(resourceId) {\n const res = this._resources[resourceId];\n if (res) {\n res.delete();\n delete this._resources[resourceId];\n }\n }\n unsubscribe({ consumerId }) {\n const consumer = this._consumers[consumerId];\n if (consumer) {\n for (const requestId in consumer) {\n const request = consumer[requestId];\n const resource = this._resources[request.resourceId];\n if (resource) {\n resource.unsubscribe(request);\n }\n }\n delete this._consumers[consumerId];\n this.prune();\n }\n }\n subscribe({ resourceId, onChange, consumerId, requestId = 'default' }) {\n const { _resources: resources, protocol } = this;\n if (resourceId.startsWith(protocol)) {\n resourceId = resourceId.replace(protocol, '');\n if (!resources[resourceId]) {\n // Add placeholder. When this resource becomes available, the consumer will be notified.\n this.add({ resourceId, data: null, persistent: false });\n }\n }\n const res = resources[resourceId];\n this._track(consumerId, requestId, res, onChange);\n if (res) {\n return res.getData();\n }\n return undefined;\n }\n prune() {\n if (!this._pruneRequest) {\n // prune() may be called multiple times in the same animation frame.\n // Batch multiple requests together\n // @ts-ignore setTimeout returns NodeJS.Timeout in node\n this._pruneRequest = setTimeout(() => this._prune(), 0);\n }\n }\n finalize() {\n for (const key in this._resources) {\n this._resources[key].delete();\n }\n }\n _track(consumerId, requestId, resource, onChange) {\n const consumers = this._consumers;\n const consumer = (consumers[consumerId] = consumers[consumerId] || {});\n let request = consumer[requestId];\n const oldResource = request && request.resourceId && this._resources[request.resourceId];\n if (oldResource) {\n oldResource.unsubscribe(request);\n this.prune();\n }\n if (resource) {\n if (request) {\n request.onChange = onChange;\n request.resourceId = resource.id;\n }\n else {\n request = {\n onChange,\n resourceId: resource.id\n };\n }\n consumer[requestId] = request;\n resource.subscribe(request);\n }\n }\n _prune() {\n this._pruneRequest = null;\n for (const key of Object.keys(this._resources)) {\n const res = this._resources[key];\n if (!res.persistent && !res.inUse()) {\n res.delete();\n delete this._resources[key];\n }\n }\n }\n}\n","export class TypedArrayManager {\n constructor(options = {}) {\n this._pool = [];\n this.opts = { overAlloc: 2, poolSize: 100 };\n this.setOptions(options);\n }\n setOptions(options) {\n Object.assign(this.opts, options);\n }\n allocate(typedArray, count, { size = 1, type, padding = 0, copy = false, initialize = false, maxCount }) {\n const Type = type || (typedArray && typedArray.constructor) || Float32Array;\n const newSize = count * size + padding;\n if (ArrayBuffer.isView(typedArray)) {\n if (newSize <= typedArray.length) {\n return typedArray;\n }\n if (newSize * typedArray.BYTES_PER_ELEMENT <= typedArray.buffer.byteLength) {\n return new Type(typedArray.buffer, 0, newSize);\n }\n }\n let maxSize = Infinity;\n if (maxCount) {\n maxSize = maxCount * size + padding;\n }\n const newArray = this._allocate(Type, newSize, initialize, maxSize);\n if (typedArray && copy) {\n newArray.set(typedArray);\n }\n else if (!initialize) {\n // Hack - always initialize the first 4 elements. NaNs crash the Attribute validation\n newArray.fill(0, 0, 4);\n }\n this._release(typedArray);\n return newArray;\n }\n release(typedArray) {\n this._release(typedArray);\n }\n _allocate(Type, size, initialize, maxSize) {\n // Allocate at least one element to ensure a valid buffer\n let sizeToAllocate = Math.max(Math.ceil(size * this.opts.overAlloc), 1);\n // Don't over allocate after certain specified number of elements\n if (sizeToAllocate > maxSize) {\n sizeToAllocate = maxSize;\n }\n // Check if available in pool\n const pool = this._pool;\n const byteLength = Type.BYTES_PER_ELEMENT * sizeToAllocate;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i >= 0) {\n // Create a new array using an existing buffer\n const array = new Type(pool.splice(i, 1)[0], 0, sizeToAllocate);\n if (initialize) {\n // Viewing a buffer with a different type may create NaNs\n array.fill(0);\n }\n return array;\n }\n return new Type(sizeToAllocate);\n }\n _release(typedArray) {\n if (!ArrayBuffer.isView(typedArray)) {\n return;\n }\n const pool = this._pool;\n const { buffer } = typedArray;\n // Save the buffer of the released array into the pool\n // Sort buffers by size\n // TODO - implement binary search?\n const { byteLength } = buffer;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i < 0) {\n pool.push(buffer);\n }\n else if (i > 0 || pool.length < this.opts.poolSize) {\n pool.splice(i, 0, buffer);\n }\n if (pool.length > this.opts.poolSize) {\n // Drop the smallest one\n pool.shift();\n }\n }\n}\nexport default new TypedArrayManager();\n","// math.gl, MIT license\nconst RADIANS_TO_DEGREES = (1 / Math.PI) * 180;\nconst DEGREES_TO_RADIANS = (1 / 180) * Math.PI;\nconst DEFAULT_CONFIG = {\n EPSILON: 1e-12,\n debug: false,\n precision: 4,\n printTypes: false,\n printDegrees: false,\n printRowMajor: true,\n _cartographicRadians: false\n};\n// Configuration is truly global as of v3.6 to ensure single config even if multiple copies of math.gl\n// Multiple copies of config can be quite tricky to debug...\nglobalThis.mathgl = globalThis.mathgl || { config: { ...DEFAULT_CONFIG } };\nexport const config = globalThis.mathgl.config;\nexport function configure(options) {\n // Only copy existing keys\n Object.assign(config, options);\n return config;\n}\n/**\n * Formats a value into a string\n * @param value\n * @param param1\n * @returns\n */\nexport function formatValue(value, { precision = config.precision } = {}) {\n value = round(value);\n // get rid of trailing zeros\n return `${parseFloat(value.toPrecision(precision))}`;\n}\n/**\n * Check if value is an \"array\"\n * Returns `true` if value is either an array or a typed array\n * Note: returns `false` for `ArrayBuffer` and `DataView` instances\n * @note isTypedArray and isNumericArray are often more useful in TypeScript\n */\nexport function isArray(value) {\n return Array.isArray(value) || (ArrayBuffer.isView(value) && !(value instanceof DataView));\n}\nexport function clone(array) {\n return 'clone' in array ? array.clone() : array.slice();\n}\nexport function toRadians(degrees) {\n return radians(degrees);\n}\nexport function toDegrees(radians) {\n return degrees(radians);\n}\nexport function radians(degrees, result) {\n return map(degrees, (degrees) => degrees * DEGREES_TO_RADIANS, result);\n}\nexport function degrees(radians, result) {\n return map(radians, (radians) => radians * RADIANS_TO_DEGREES, result);\n}\n/**\n * \"GLSL equivalent\" of `Math.sin`: Works on single values and vectors\n * @deprecated\n */\nexport function sin(radians, result) {\n return map(radians, (angle) => Math.sin(angle), result);\n}\n/**\n * \"GLSL equivalent\" of `Math.cos`: Works on single values and vectors\n * @deprecated\n */\nexport function cos(radians, result) {\n return map(radians, (angle) => Math.cos(angle), result);\n}\n/**\n * \"GLSL equivalent\" of `Math.tan`: Works on single values and vectors\n * @deprecated\n */\nexport function tan(radians, result) {\n return map(radians, (angle) => Math.tan(angle), result);\n}\n/**\n * \"GLSL equivalent\" of `Math.asin`: Works on single values and vectors\n * @deprecated\n */\nexport function asin(radians, result) {\n return map(radians, (angle) => Math.asin(angle), result);\n}\n/**\n * \"GLSL equivalent\" of `Math.acos`: Works on single values and vectors\n * @deprecated\n */\nexport function acos(radians, result) {\n return map(radians, (angle) => Math.acos(angle), result);\n}\n/**\n * \"GLSL equivalent\" of `Math.atan`: Works on single values and vectors\n * @deprecated\n */\nexport function atan(radians, result) {\n return map(radians, (angle) => Math.atan(angle), result);\n}\nexport function clamp(value, min, max) {\n return map(value, (value) => Math.max(min, Math.min(max, value)));\n}\nexport function lerp(a, b, t) {\n if (isArray(a)) {\n return a.map((ai, i) => lerp(ai, b[i], t));\n }\n return t * b + (1 - t) * a;\n}\n/* eslint-disable */\n/**\n * Compares any two math objects, using `equals` method if available.\n * @param a\n * @param b\n * @param epsilon\n * @returns\n */\nexport function equals(a, b, epsilon) {\n const oldEpsilon = config.EPSILON;\n if (epsilon) {\n config.EPSILON = epsilon;\n }\n try {\n if (a === b) {\n return true;\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n // eslint-disable-next-line max-depth\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (a && a.equals) {\n return a.equals(b);\n }\n if (b && b.equals) {\n return b.equals(a);\n }\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b) <= config.EPSILON * Math.max(1, Math.abs(a), Math.abs(b));\n }\n return false;\n }\n finally {\n config.EPSILON = oldEpsilon;\n }\n}\nexport function exactEquals(a, b) {\n if (a === b) {\n return true;\n }\n if (a && typeof a === 'object' && b && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false;\n }\n if (a.exactEquals) {\n return a.exactEquals(b);\n }\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n if (!exactEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n/* eslint-enable */\nexport function withEpsilon(epsilon, func) {\n const oldPrecision = config.EPSILON;\n config.EPSILON = epsilon;\n let value;\n try {\n value = func();\n }\n finally {\n config.EPSILON = oldPrecision;\n }\n return value;\n}\n// HELPERS\nfunction round(value) {\n return Math.round(value / config.EPSILON) * config.EPSILON;\n}\n// If the array has a clone function, calls it, otherwise returns a copy\nfunction duplicateArray(array) {\n // @ts-expect-error We check for math.gl class methods\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return array.clone ? array.clone() : new Array(array.length);\n}\n// If the argument value is an array, applies the func element wise,\n// otherwise applies func to the argument value\nfunction map(value, func, result) {\n if (isArray(value)) {\n const array = value;\n result = result || duplicateArray(array);\n for (let i = 0; i < result.length && i < array.length; ++i) {\n const val = typeof value === 'number' ? value : value[i];\n result[i] = func(val, i, result);\n }\n return result;\n }\n return func(value);\n}\n","import { config, formatValue, equals, isArray } from \"../../lib/common.js\";\n/** Base class for vectors and matrices */\nexport class MathArray extends Array {\n // Common methods\n /**\n * Clone the current object\n * @returns a new copy of this object\n */\n clone() {\n // @ts-expect-error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.\n return new this.constructor().copy(this); // eslint-disable-line\n }\n fromArray(array, offset = 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = array[i + offset];\n }\n return this.check();\n }\n toArray(targetArray = [], offset = 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n targetArray[offset + i] = this[i];\n }\n return targetArray;\n }\n toObject(targetObject) {\n return targetObject;\n }\n from(arrayOrObject) {\n return Array.isArray(arrayOrObject)\n ? this.copy(arrayOrObject)\n : // @ts-ignore\n this.fromObject(arrayOrObject);\n }\n to(arrayOrObject) {\n // @ts-ignore\n if (arrayOrObject === this) {\n return this;\n }\n // @ts-expect-error TS2339: Property 'toObject' does not exist on type 'MathArray'.\n return isArray(arrayOrObject) ? this.toArray(arrayOrObject) : this.toObject(arrayOrObject);\n }\n toTarget(target) {\n return target ? this.to(target) : this;\n }\n /** @deprecated */\n toFloat32Array() {\n return new Float32Array(this);\n }\n toString() {\n return this.formatString(config);\n }\n /** Formats string according to options */\n formatString(opts) {\n let string = '';\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += (i > 0 ? ', ' : '') + formatValue(this[i], opts);\n }\n return `${opts.printTypes ? this.constructor.name : ''}[${string}]`;\n }\n equals(array) {\n if (!array || this.length !== array.length) {\n return false;\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (!equals(this[i], array[i])) {\n return false;\n }\n }\n return true;\n }\n exactEquals(array) {\n if (!array || this.length !== array.length) {\n return false;\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (this[i] !== array[i]) {\n return false;\n }\n }\n return true;\n }\n // Modifiers\n /** Negates all values in this object */\n negate() {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = -this[i];\n }\n return this.check();\n }\n lerp(a, b, t) {\n if (t === undefined) {\n return this.lerp(this, a, b);\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const ai = a[i];\n const endValue = typeof b === 'number' ? b : b[i];\n this[i] = ai + t * (endValue - ai);\n }\n return this.check();\n }\n /** Minimal */\n min(vector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(vector[i], this[i]);\n }\n return this.check();\n }\n /** Maximal */\n max(vector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.max(vector[i], this[i]);\n }\n return this.check();\n }\n clamp(minVector, maxVector) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], minVector[i]), maxVector[i]);\n }\n return this.check();\n }\n add(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += vector[i];\n }\n }\n return this.check();\n }\n subtract(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] -= vector[i];\n }\n }\n return this.check();\n }\n scale(scale) {\n if (typeof scale === 'number') {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scale;\n }\n }\n else {\n for (let i = 0; i < this.ELEMENTS && i < scale.length; ++i) {\n this[i] *= scale[i];\n }\n }\n return this.check();\n }\n /**\n * Multiplies all elements by `scale`\n * Note: `Matrix4.multiplyByScalar` only scales its 3x3 \"minor\"\n */\n multiplyByScalar(scalar) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n return this.check();\n }\n // Debug checks\n /** Throws an error if array length is incorrect or contains illegal values */\n check() {\n if (config.debug && !this.validate()) {\n throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);\n }\n return this;\n }\n /** Returns false if the array length is incorrect or contains illegal values */\n validate() {\n let valid = this.length === this.ELEMENTS;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n valid = valid && Number.isFinite(this[i]);\n }\n return valid;\n }\n // three.js compatibility\n /** @deprecated */\n sub(a) {\n return this.subtract(a);\n }\n /** @deprecated */\n setScalar(a) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = a;\n }\n return this.check();\n }\n /** @deprecated */\n addScalar(a) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += a;\n }\n return this.check();\n }\n /** @deprecated */\n subScalar(a) {\n return this.addScalar(-a);\n }\n /** @deprecated */\n multiplyScalar(scalar) {\n // Multiplies all elements\n // `Matrix4.scale` only scales its 3x3 \"minor\"\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n return this.check();\n }\n /** @deprecated */\n divideScalar(a) {\n return this.multiplyByScalar(1 / a);\n }\n /** @deprecated */\n clampScalar(min, max) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], min), max);\n }\n return this.check();\n }\n /** @deprecated */\n get elements() {\n return this;\n }\n}\n","import { config } from \"./common.js\";\nexport function validateVector(v, length) {\n if (v.length !== length) {\n return false;\n }\n // Could be arguments \"array\" (v.every not availasble)\n for (let i = 0; i < v.length; ++i) {\n if (!Number.isFinite(v[i])) {\n return false;\n }\n }\n return true;\n}\nexport function checkNumber(value) {\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid number ${JSON.stringify(value)}`);\n }\n return value;\n}\nexport function checkVector(v, length, callerName = '') {\n if (config.debug && !validateVector(v, length)) {\n throw new Error(`math.gl: ${callerName} some fields set to invalid numbers'`);\n }\n return v;\n}\nconst map = {};\nexport function deprecated(method, version) {\n if (!map[method]) {\n map[method] = true;\n // eslint-disable-next-line\n console.warn(`${method} has been removed in version ${version}, see upgrade guide for more information`);\n }\n}\n","export function assert(condition, message) {\n if (!condition) {\n throw new Error(`math.gl assertion ${message}`);\n }\n}\n","import { MathArray } from \"./math-array.js\";\nimport { checkNumber } from \"../../lib/validators.js\";\nimport { assert } from \"../../lib/assert.js\";\n/** Base class for vectors with at least 2 elements */\nexport class Vector extends MathArray {\n // ACCESSORS\n get x() {\n return this[0];\n }\n set x(value) {\n this[0] = checkNumber(value);\n }\n get y() {\n return this[1];\n }\n set y(value) {\n this[1] = checkNumber(value);\n }\n /**\n * Returns the length of the vector from the origin to the point described by this vector\n *\n * @note `length` is a reserved word for Arrays, so `v.length()` will return number of elements\n * Instead we provide `len` and `magnitude`\n */\n len() {\n return Math.sqrt(this.lengthSquared());\n }\n /**\n * Returns the length of the vector from the origin to the point described by this vector\n */\n magnitude() {\n return this.len();\n }\n /**\n * Returns the squared length of the vector from the origin to the point described by this vector\n */\n lengthSquared() {\n let length = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n length += this[i] * this[i];\n }\n return length;\n }\n /**\n * Returns the squared length of the vector from the origin to the point described by this vector\n */\n magnitudeSquared() {\n return this.lengthSquared();\n }\n distance(mathArray) {\n return Math.sqrt(this.distanceSquared(mathArray));\n }\n distanceSquared(mathArray) {\n let length = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const dist = this[i] - mathArray[i];\n length += dist * dist;\n }\n return checkNumber(length);\n }\n dot(mathArray) {\n let product = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n product += this[i] * mathArray[i];\n }\n return checkNumber(product);\n }\n // MODIFIERS\n normalize() {\n const length = this.magnitude();\n if (length !== 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= length;\n }\n }\n return this.check();\n }\n multiply(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= vector[i];\n }\n }\n return this.check();\n }\n divide(...vectors) {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= vector[i];\n }\n }\n return this.check();\n }\n // THREE.js compatibility\n lengthSq() {\n return this.lengthSquared();\n }\n distanceTo(vector) {\n return this.distance(vector);\n }\n distanceToSquared(vector) {\n return this.distanceSquared(vector);\n }\n getComponent(i) {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n return checkNumber(this[i]);\n }\n setComponent(i, value) {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n this[i] = value;\n return this.check();\n }\n addVectors(a, b) {\n return this.copy(a).add(b);\n }\n subVectors(a, b) {\n return this.copy(a).subtract(b);\n }\n multiplyVectors(a, b) {\n return this.copy(a).multiply(b);\n }\n addScaledVector(a, b) {\n // @ts-expect-error error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.\n return this.add(new this.constructor(a).multiplyScalar(b));\n }\n}\n","// @eslint-disable\n// @ts-nocheck\nimport * as glMatrix from './common.js';\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nexport function create() {\n const out = new glMatrix.ARRAY_TYPE(3);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nexport function clone(a) {\n const out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nexport function fromValues(x, y, z) {\n const out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * symmetric round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\nexport function normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n // TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function slerp(out, a, b, t) {\n const angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));\n const sinTotal = Math.sin(angle);\n const ratioA = Math.sin((1 - t) * angle) / sinTotal;\n const ratioB = Math.sin(t * angle) / sinTotal;\n out[0] = ratioA * a[0] + ratioB * b[0];\n out[1] = ratioA * a[1] + ratioB * b[1];\n out[2] = ratioA * a[2] + ratioB * b[2];\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function hermite(out, a, b, c, d, t) {\n const factorTimes2 = t * t;\n const factor1 = factorTimes2 * (2 * t - 3) + 1;\n const factor2 = factorTimes2 * (t - 2) + t;\n const factor3 = factorTimes2 * (t - 1);\n const factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function bezier(out, a, b, c, d, t) {\n const inverseFactor = 1 - t;\n const inverseFactorTimesTwo = inverseFactor * inverseFactor;\n const factorTimes2 = t * t;\n const factor1 = inverseFactorTimesTwo * inverseFactor;\n const factor2 = 3 * t * inverseFactorTimesTwo;\n const factor3 = 3 * factorTimes2 * inverseFactor;\n const factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec3} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n const r = glMatrix.RANDOM() * 2.0 * Math.PI;\n const z = glMatrix.RANDOM() * 2.0 - 1.0;\n const zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n let w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const x = a[0];\n const y = a[1];\n const z = a[2];\n // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n let uvx = qy * z - qz * y;\n let uvy = qz * x - qx * z;\n let uvz = qx * y - qy * x;\n // var uuv = vec3.cross([], qvec, uv);\n let uuvx = qy * uvz - qz * uvy;\n let uuvy = qz * uvx - qx * uvz;\n let uuvz = qx * uvy - qy * uvx;\n // vec3.scale(uv, uv, 2 * w);\n const w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2;\n // vec3.scale(uuv, uuv, 2);\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2;\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateX(out, a, b, rad) {\n const p = [];\n const r = [];\n // Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n // perform rotation\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n // translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateY(out, a, b, rad) {\n const p = [];\n const r = [];\n // Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n // perform rotation\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n // translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateZ(out, a, b, rad) {\n const p = [];\n const r = [];\n // Translate point to the origin\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2];\n // perform rotation\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2];\n // translate to correct position\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz));\n const cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return `vec3(${a[0]}, ${a[1]}, ${a[2]})`;\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n return (Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nexport const sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nexport const mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nexport const div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nexport const dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nexport const sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nexport const len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nexport const sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport const forEach = (function () {\n const vec = create();\n return function (a, stride, offset, count, fn, arg) {\n let i;\n let l;\n if (!stride) {\n stride = 3;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n }\n else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n return a;\n };\n})();\n","// vec2 additions\nexport function vec2_transformMat4AsVector(out, a, m) {\n const x = a[0];\n const y = a[1];\n const w = m[3] * x + m[7] * y || 1.0;\n out[0] = (m[0] * x + m[4] * y) / w;\n out[1] = (m[1] * x + m[5] * y) / w;\n return out;\n}\n// vec3 additions\n// Transform as vector, only uses 3x3 minor matrix\nexport function vec3_transformMat4AsVector(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = m[3] * x + m[7] * y + m[11] * z || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z) / w;\n return out;\n}\nexport function vec3_transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n return out;\n}\n// vec4 additions\nexport function vec4_transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\nexport function vec4_transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n out[0] = m[0] * x + m[3] * y + m[6] * z;\n out[1] = m[1] * x + m[4] * y + m[7] * z;\n out[2] = m[2] * x + m[5] * y + m[8] * z;\n out[3] = a[3];\n return out;\n}\n","import { Vector } from \"./base/vector.js\";\nimport { config, isArray } from \"../lib/common.js\";\nimport { checkNumber } from \"../lib/validators.js\";\n// @ts-ignore gl-matrix types\nimport { angle as vec3_angle, cross as vec3_cross, rotateX as vec3_rotateX, rotateY as vec3_rotateY, rotateZ as vec3_rotateZ, transformMat4 as vec3_transformMat4, transformMat3 as vec3_transformMat3, transformQuat as vec3_transformQuat } from \"../gl-matrix/vec3.js\";\n/* eslint-disable camelcase */\nimport { vec3_transformMat2, vec3_transformMat4AsVector } from \"../lib/gl-matrix-extras.js\";\nconst ORIGIN = [0, 0, 0];\nlet ZERO;\n/**\n * Three-element vector class.\n * Subclass of Array\n */\nexport class Vector3 extends Vector {\n static get ZERO() {\n if (!ZERO) {\n ZERO = new Vector3(0, 0, 0);\n Object.freeze(ZERO);\n }\n return ZERO;\n }\n /**\n * @class\n * @param x\n * @param y\n * @param z\n */\n constructor(x = 0, y = 0, z = 0) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0);\n if (arguments.length === 1 && isArray(x)) {\n this.copy(x);\n }\n else {\n // this.set(x, y, z);\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n checkNumber(z);\n }\n // @ts-expect-error TS2412: Property '0' of type 'number | [number, number, number]' is not assignable to numeric index type 'number'\n this[0] = x;\n this[1] = y;\n this[2] = z;\n }\n }\n set(x, y, z) {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n return this.check();\n }\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n return this.check();\n }\n fromObject(object) {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n checkNumber(object.z);\n }\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n return this.check();\n }\n toObject(object) {\n object.x = this[0];\n object.y = this[1];\n object.z = this[2];\n return object;\n }\n // Getters/setters\n get ELEMENTS() {\n return 3;\n }\n get z() {\n return this[2];\n }\n set z(value) {\n this[2] = checkNumber(value);\n }\n // ACCESSORS\n angle(vector) {\n return vec3_angle(this, vector);\n }\n // MODIFIERS\n cross(vector) {\n vec3_cross(this, this, vector);\n return this.check();\n }\n rotateX({ radians, origin = ORIGIN }) {\n vec3_rotateX(this, this, origin, radians);\n return this.check();\n }\n rotateY({ radians, origin = ORIGIN }) {\n vec3_rotateY(this, this, origin, radians);\n return this.check();\n }\n rotateZ({ radians, origin = ORIGIN }) {\n vec3_rotateZ(this, this, origin, radians);\n return this.check();\n }\n // Transforms\n // transforms as point (4th component is implicitly 1)\n transform(matrix4) {\n return this.transformAsPoint(matrix4);\n }\n // transforms as point (4th component is implicitly 1)\n transformAsPoint(matrix4) {\n vec3_transformMat4(this, this, matrix4);\n return this.check();\n }\n // transforms as vector (4th component is implicitly 0, ignores translation. slightly faster)\n transformAsVector(matrix4) {\n vec3_transformMat4AsVector(this, this, matrix4);\n return this.check();\n }\n transformByMatrix3(matrix3) {\n vec3_transformMat3(this, this, matrix3);\n return this.check();\n }\n transformByMatrix2(matrix2) {\n vec3_transformMat2(this, this, matrix2);\n return this.check();\n }\n transformByQuaternion(quaternion) {\n vec3_transformQuat(this, this, quaternion);\n return this.check();\n }\n}\n","// Extensions to math.gl library. Intended to be folded back.\nimport typedArrayManager from \"./typed-array-manager.js\";\nimport { Vector3 } from '@math.gl/core';\n// Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()\nexport function createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\nexport function mod(value, divisor) {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\n// Extract camera vectors (move to math library?)\nexport function getCameraPosition(viewMatrixInverse) {\n // Read the translation from the inverse view matrix\n return [viewMatrixInverse[12], viewMatrixInverse[13], viewMatrixInverse[14]];\n}\n// https://www.gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf\nexport function getFrustumPlanes(viewProjectionMatrix) {\n return {\n left: getFrustumPlane(viewProjectionMatrix[3] + viewProjectionMatrix[0], viewProjectionMatrix[7] + viewProjectionMatrix[4], viewProjectionMatrix[11] + viewProjectionMatrix[8], viewProjectionMatrix[15] + viewProjectionMatrix[12]),\n right: getFrustumPlane(viewProjectionMatrix[3] - viewProjectionMatrix[0], viewProjectionMatrix[7] - viewProjectionMatrix[4], viewProjectionMatrix[11] - viewProjectionMatrix[8], viewProjectionMatrix[15] - viewProjectionMatrix[12]),\n bottom: getFrustumPlane(viewProjectionMatrix[3] + viewProjectionMatrix[1], viewProjectionMatrix[7] + viewProjectionMatrix[5], viewProjectionMatrix[11] + viewProjectionMatrix[9], viewProjectionMatrix[15] + viewProjectionMatrix[13]),\n top: getFrustumPlane(viewProjectionMatrix[3] - viewProjectionMatrix[1], viewProjectionMatrix[7] - viewProjectionMatrix[5], viewProjectionMatrix[11] - viewProjectionMatrix[9], viewProjectionMatrix[15] - viewProjectionMatrix[13]),\n near: getFrustumPlane(viewProjectionMatrix[3] + viewProjectionMatrix[2], viewProjectionMatrix[7] + viewProjectionMatrix[6], viewProjectionMatrix[11] + viewProjectionMatrix[10], viewProjectionMatrix[15] + viewProjectionMatrix[14]),\n far: getFrustumPlane(viewProjectionMatrix[3] - viewProjectionMatrix[2], viewProjectionMatrix[7] - viewProjectionMatrix[6], viewProjectionMatrix[11] - viewProjectionMatrix[10], viewProjectionMatrix[15] - viewProjectionMatrix[14])\n };\n}\nconst scratchVector = new Vector3();\nfunction getFrustumPlane(a, b, c, d) {\n scratchVector.set(a, b, c);\n const L = scratchVector.len();\n return { distance: d / L, normal: new Vector3(-a / L, -b / L, -c / L) };\n}\n/**\n * Calculate the low part of a WebGL 64 bit float\n * @param x {number} - the input float number\n * @returns {number} - the lower 32 bit of the number\n */\nexport function fp64LowPart(x) {\n return x - Math.fround(x);\n}\nlet scratchArray;\n/**\n * Split a Float64Array into a double-length Float32Array\n * @param typedArray\n * @param options\n * @param options.size - per attribute size\n * @param options.startIndex - start index in the source array\n * @param options.endIndex - end index in the source array\n * @returns {} - high part, low part for each attribute:\n [1xHi, 1yHi, 1zHi, 1xLow, 1yLow, 1zLow, 2xHi, ...]\n */\nexport function toDoublePrecisionArray(typedArray, options) {\n const { size = 1, startIndex = 0 } = options;\n const endIndex = options.endIndex !== undefined ? options.endIndex : typedArray.length;\n const count = (endIndex - startIndex) / size;\n scratchArray = typedArrayManager.allocate(scratchArray, count, {\n type: Float32Array,\n size: size * 2\n });\n let sourceIndex = startIndex;\n let targetIndex = 0;\n while (sourceIndex < endIndex) {\n for (let j = 0; j < size; j++) {\n const value = typedArray[sourceIndex++];\n scratchArray[targetIndex + j] = value;\n scratchArray[targetIndex + j + size] = fp64LowPart(value);\n }\n targetIndex += size * 2;\n }\n return scratchArray.subarray(0, count * size * 2);\n}\nexport function mergeBounds(boundsList) {\n let mergedBounds = null;\n let isMerged = false;\n for (const bounds of boundsList) {\n /* eslint-disable-next-line no-continue */\n if (!bounds)\n continue;\n if (!mergedBounds) {\n mergedBounds = bounds;\n }\n else {\n if (!isMerged) {\n // Copy to avoid mutating input bounds\n mergedBounds = [\n [mergedBounds[0][0], mergedBounds[0][1]],\n [mergedBounds[1][0], mergedBounds[1][1]]\n ];\n isMerged = true;\n }\n mergedBounds[0][0] = Math.min(mergedBounds[0][0], bounds[0][0]);\n mergedBounds[0][1] = Math.min(mergedBounds[0][1], bounds[0][1]);\n mergedBounds[1][0] = Math.max(mergedBounds[1][0], bounds[1][0]);\n mergedBounds[1][1] = Math.max(mergedBounds[1][1], bounds[1][1]);\n }\n }\n return mergedBounds;\n}\n","import { MathArray } from \"./math-array.js\";\nimport { checkNumber } from \"../../lib/validators.js\";\nimport { config } from \"../../lib/common.js\";\n/** Base class for matrices */\nexport class Matrix extends MathArray {\n // fromObject(object) {\n // const array = object.elements;\n // return this.fromRowMajor(array);\n // }\n // toObject(object) {\n // const array = object.elements;\n // this.toRowMajor(array);\n // return object;\n // }\n // TODO better override formatString?\n toString() {\n let string = '[';\n if (config.printRowMajor) {\n string += 'row-major:';\n for (let row = 0; row < this.RANK; ++row) {\n for (let col = 0; col < this.RANK; ++col) {\n string += ` ${this[col * this.RANK + row]}`;\n }\n }\n }\n else {\n string += 'column-major:';\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += ` ${this[i]}`;\n }\n }\n string += ']';\n return string;\n }\n getElementIndex(row, col) {\n return col * this.RANK + row;\n }\n // By default assumes row major indices\n getElement(row, col) {\n return this[col * this.RANK + row];\n }\n // By default assumes row major indices\n setElement(row, col, value) {\n this[col * this.RANK + row] = checkNumber(value);\n return this;\n }\n getColumn(columnIndex, result = new Array(this.RANK).fill(-0)) {\n const firstIndex = columnIndex * this.RANK;\n for (let i = 0; i < this.RANK; ++i) {\n result[i] = this[firstIndex + i];\n }\n return result;\n }\n setColumn(columnIndex, columnVector) {\n const firstIndex = columnIndex * this.RANK;\n for (let i = 0; i < this.RANK; ++i) {\n this[firstIndex + i] = columnVector[i];\n }\n return this;\n }\n}\n","// @eslint-disable\n// @ts-nocheck\nimport * as glMatrix from './common.js';\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n/**\n * Creates a new, empty vec2\n *\n * @returns {NumericArray} a new 2D vector\n */\nexport function create() {\n const out = new glMatrix.ARRAY_TYPE(2);\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n return out;\n}\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {Readonly} a vector to clone\n * @returns {NumericArray} a new 2D vector\n */\nexport function clone(a) {\n const out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {NumericArray} a new 2D vector\n */\nexport function fromValues(x, y) {\n const out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Copy the values from one vec2 to another\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the source vector\n * @returns {NumericArray} out\n */\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {NumericArray} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {NumericArray} out\n */\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Adds two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\n * Multiplies two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\n * Divides two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\n * Math.ceil the components of a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to ceil\n * @returns {NumericArray} out\n */\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\n * Math.floor the components of a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to floor\n * @returns {NumericArray} out\n */\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\n * Returns the minimum of two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\n * Returns the maximum of two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {NumericArray} out\n */\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\n * symmetric round the components of a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to round\n * @returns {NumericArray} out\n */\nexport function round(out, a) {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n return out;\n}\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {NumericArray} out\n */\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {NumericArray} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n return Math.sqrt(x * x + y * y);\n}\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\n * Calculates the length of a vec2\n *\n * @param {Readonly} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n const x = a[0];\n const y = a[1];\n return Math.sqrt(x * x + y * y);\n}\n/**\n * Calculates the squared length of a vec2\n *\n * @param {Readonly} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n const x = a[0];\n const y = a[1];\n return x * x + y * y;\n}\n/**\n * Negates the components of a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to negate\n * @returns {NumericArray} out\n */\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to invert\n * @returns {NumericArray} out\n */\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\n * Normalize a vec2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a vector to normalize\n * @returns {NumericArray} out\n */\nexport function normalize(out, a) {\n const x = a[0];\n const y = a[1];\n let len = x * x + y * y;\n if (len > 0) {\n // TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n const z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the first operand\n * @param {Readonly} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {NumericArray} out\n */\nexport function lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {NumericArray} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {NumericArray} out\n */\nexport function random(out, scale) {\n scale = scale === undefined ? 1.0 : scale;\n const r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {NumericArray} out\n */\nexport function transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {NumericArray} out\n */\nexport function transformMat2d(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {NumericArray} out\n */\nexport function transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {NumericArray} out the receiving vector\n * @param {Readonly} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {NumericArray} out\n */\nexport function transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\n * Rotate a 2D vector\n * @param {NumericArray} out The receiving vec2\n * @param {Readonly} a The vec2 point to rotate\n * @param {Readonly} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {NumericArray} out\n */\nexport function rotate(out, a, b, rad) {\n // Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n // perform rotation and translate to correct position\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\n * Get the angle between two 2D vectors\n * @param {Readonly} a The first operand\n * @param {Readonly} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n const x1 = a[0];\n const y1 = a[1];\n const x2 = b[0];\n const y2 = b[1];\n // mag is the product of the magnitudes of a and b\n const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));\n // mag &&.. short circuits if mag == 0\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec2 to zero\n *\n * @param {NumericArray} out the receiving vector\n * @returns {NumericArray} out\n */\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {Readonly} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n return `vec2(${a[0]}, ${a[1]})`;\n}\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {Readonly} a The first vector.\n * @param {Readonly} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {Readonly} a The first vector.\n * @param {Readonly} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const b0 = b[0];\n const b1 = b[1];\n return (Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)));\n}\n/**\n * Alias for {@link vec2.length}\n * @function\n */\nexport const len = length;\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\nexport const sub = subtract;\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\nexport const mul = multiply;\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\nexport const div = divide;\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\nexport const dist = distance;\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\nexport const sqrDist = squaredDistance;\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\nexport const sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport const forEach = (function () {\n const vec = create();\n return function (a, stride, offset, count, fn, arg) {\n let i;\n let l;\n if (!stride) {\n stride = 2;\n }\n if (!offset) {\n offset = 0;\n }\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n }\n else {\n l = a.length;\n }\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n return a;\n };\n})();\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport { Matrix } from \"./base/matrix.js\";\nimport { checkVector } from \"../lib/validators.js\";\n/* eslint-disable camelcase */\nimport { vec2_transformMat4AsVector, vec3_transformMat4AsVector } from \"../lib/gl-matrix-extras.js\";\n// @ts-ignore gl-matrix types...\nimport { fromQuat as mat4_fromQuat, frustum as mat4_frustum, lookAt as mat4_lookAt, ortho as mat4_ortho, perspective as mat4_perspective, determinant as mat4_determinant, transpose as mat4_transpose, invert as mat4_invert, multiply as mat4_multiply, rotateX as mat4_rotateX, rotateY as mat4_rotateY, rotateZ as mat4_rotateZ, rotate as mat4_rotate, scale as mat4_scale, translate as mat4_translate } from \"../gl-matrix/mat4.js\";\nimport { transformMat4 as vec2_transformMat4 } from \"../gl-matrix/vec2.js\";\nimport { transformMat4 as vec3_transformMat4 } from \"../gl-matrix/vec3.js\";\nimport { transformMat4 as vec4_transformMat4 } from \"../gl-matrix/vec4.js\";\nvar INDICES;\n(function (INDICES) {\n INDICES[INDICES[\"COL0ROW0\"] = 0] = \"COL0ROW0\";\n INDICES[INDICES[\"COL0ROW1\"] = 1] = \"COL0ROW1\";\n INDICES[INDICES[\"COL0ROW2\"] = 2] = \"COL0ROW2\";\n INDICES[INDICES[\"COL0ROW3\"] = 3] = \"COL0ROW3\";\n INDICES[INDICES[\"COL1ROW0\"] = 4] = \"COL1ROW0\";\n INDICES[INDICES[\"COL1ROW1\"] = 5] = \"COL1ROW1\";\n INDICES[INDICES[\"COL1ROW2\"] = 6] = \"COL1ROW2\";\n INDICES[INDICES[\"COL1ROW3\"] = 7] = \"COL1ROW3\";\n INDICES[INDICES[\"COL2ROW0\"] = 8] = \"COL2ROW0\";\n INDICES[INDICES[\"COL2ROW1\"] = 9] = \"COL2ROW1\";\n INDICES[INDICES[\"COL2ROW2\"] = 10] = \"COL2ROW2\";\n INDICES[INDICES[\"COL2ROW3\"] = 11] = \"COL2ROW3\";\n INDICES[INDICES[\"COL3ROW0\"] = 12] = \"COL3ROW0\";\n INDICES[INDICES[\"COL3ROW1\"] = 13] = \"COL3ROW1\";\n INDICES[INDICES[\"COL3ROW2\"] = 14] = \"COL3ROW2\";\n INDICES[INDICES[\"COL3ROW3\"] = 15] = \"COL3ROW3\";\n})(INDICES || (INDICES = {}));\nconst DEFAULT_FOVY = (45 * Math.PI) / 180;\nconst DEFAULT_ASPECT = 1;\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 500;\nconst IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n/** 4x4 matrix */\nexport class Matrix4 extends Matrix {\n static get IDENTITY() {\n return getIdentityMatrix();\n }\n static get ZERO() {\n return getZeroMatrix();\n }\n get ELEMENTS() {\n return 16;\n }\n get RANK() {\n return 4;\n }\n get INDICES() {\n return INDICES;\n }\n constructor(array) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0);\n if (arguments.length === 1 && Array.isArray(array)) {\n this.copy(array);\n }\n else {\n this.identity();\n }\n }\n copy(array) {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n this[4] = array[4];\n this[5] = array[5];\n this[6] = array[6];\n this[7] = array[7];\n this[8] = array[8];\n this[9] = array[9];\n this[10] = array[10];\n this[11] = array[11];\n this[12] = array[12];\n this[13] = array[13];\n this[14] = array[14];\n this[15] = array[15];\n return this.check();\n }\n // eslint-disable-next-line max-params\n set(m00, m10, m20, m30, m01, m11, m21, m31, m02, m12, m22, m32, m03, m13, m23, m33) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n // accepts row major order, stores as column major\n // eslint-disable-next-line max-params\n setRowMajor(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n toRowMajor(result) {\n result[0] = this[0];\n result[1] = this[4];\n result[2] = this[8];\n result[3] = this[12];\n result[4] = this[1];\n result[5] = this[5];\n result[6] = this[9];\n result[7] = this[13];\n result[8] = this[2];\n result[9] = this[6];\n result[10] = this[10];\n result[11] = this[14];\n result[12] = this[3];\n result[13] = this[7];\n result[14] = this[11];\n result[15] = this[15];\n return result;\n }\n // Constructors\n /** Set to identity matrix */\n identity() {\n return this.copy(IDENTITY_MATRIX);\n }\n /**\n *\n * @param object\n * @returns self\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromObject(object) {\n return this.check();\n }\n /**\n * Calculates a 4x4 matrix from the given quaternion\n * @param quaternion Quaternion to create matrix from\n * @returns self\n */\n fromQuaternion(quaternion) {\n mat4_fromQuat(this, quaternion);\n return this.check();\n }\n /**\n * Generates a frustum matrix with the given bounds\n * @param view.left - Left bound of the frustum\n * @param view.right - Right bound of the frustum\n * @param view.bottom - Bottom bound of the frustum\n * @param view.top - Top bound of the frustum\n * @param view.near - Near bound of the frustum\n * @param view.far - Far bound of the frustum. Can be set to Infinity.\n * @returns self\n */\n frustum(view) {\n const { left, right, bottom, top, near = DEFAULT_NEAR, far = DEFAULT_FAR } = view;\n if (far === Infinity) {\n computeInfinitePerspectiveOffCenter(this, left, right, bottom, top, near);\n }\n else {\n mat4_frustum(this, left, right, bottom, top, near, far);\n }\n return this.check();\n }\n /**\n * Generates a look-at matrix with the given eye position, focal point,\n * and up axis\n * @param view.eye - (vector) Position of the viewer\n * @param view.center - (vector) Point the viewer is looking at\n * @param view.up - (vector) Up axis\n * @returns self\n */\n lookAt(view) {\n const { eye, center = [0, 0, 0], up = [0, 1, 0] } = view;\n mat4_lookAt(this, eye, center, up);\n return this.check();\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds\n * from \"traditional\" view space parameters\n * @param view.left - Left bound of the frustum\n * @param view.right number Right bound of the frustum\n * @param view.bottom - Bottom bound of the frustum\n * @param view.top number Top bound of the frustum\n * @param view.near - Near bound of the frustum\n * @param view.far number Far bound of the frustum\n * @returns self\n */\n ortho(view) {\n const { left, right, bottom, top, near = DEFAULT_NEAR, far = DEFAULT_FAR } = view;\n mat4_ortho(this, left, right, bottom, top, near, far);\n return this.check();\n }\n /**\n * Generates an orthogonal projection matrix with the same parameters\n * as a perspective matrix (plus focalDistance)\n * @param view.fovy Vertical field of view in radians\n * @param view.aspect Aspect ratio. Typically viewport width / viewport height\n * @param view.focalDistance Distance in the view frustum used for extent calculations\n * @param view.near Near bound of the frustum\n * @param view.far Far bound of the frustum\n * @returns self\n */\n orthographic(view) {\n const { fovy = DEFAULT_FOVY, aspect = DEFAULT_ASPECT, focalDistance = 1, near = DEFAULT_NEAR, far = DEFAULT_FAR } = view;\n checkRadians(fovy);\n const halfY = fovy / 2;\n const top = focalDistance * Math.tan(halfY); // focus_plane is the distance from the camera\n const right = top * aspect;\n return this.ortho({\n left: -right,\n right,\n bottom: -top,\n top,\n near,\n far\n });\n }\n /**\n * Generates a perspective projection matrix with the given bounds\n * @param view.fovy Vertical field of view in radians\n * @param view.aspect Aspect ratio. typically viewport width/height\n * @param view.near Near bound of the frustum\n * @param view.far Far bound of the frustum\n * @returns self\n */\n perspective(view) {\n const { fovy = (45 * Math.PI) / 180, aspect = 1, near = 0.1, far = 500 } = view;\n checkRadians(fovy);\n mat4_perspective(this, fovy, aspect, near, far);\n return this.check();\n }\n // Accessors\n determinant() {\n return mat4_determinant(this);\n }\n /**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n * The scales are the \"lengths\" of the column vectors in the upper-left 3x3 matrix.\n * @param result\n * @returns self\n */\n getScale(result = [-0, -0, -0]) {\n // explicit is faster than hypot...\n result[0] = Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);\n result[1] = Math.sqrt(this[4] * this[4] + this[5] * this[5] + this[6] * this[6]);\n result[2] = Math.sqrt(this[8] * this[8] + this[9] * this[9] + this[10] * this[10]);\n // result[0] = Math.hypot(this[0], this[1], this[2]);\n // result[1] = Math.hypot(this[4], this[5], this[6]);\n // result[2] = Math.hypot(this[8], this[9], this[10]);\n return result;\n }\n /**\n * Gets the translation portion, assuming the matrix is a affine transformation matrix.\n * @param result\n * @returns self\n */\n getTranslation(result = [-0, -0, -0]) {\n result[0] = this[12];\n result[1] = this[13];\n result[2] = this[14];\n return result;\n }\n /**\n * Gets upper left 3x3 pure rotation matrix (non-scaling), assume affine transformation matrix\n * @param result\n * @param scaleResult\n * @returns self\n */\n getRotation(result, scaleResult) {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = 0;\n result[4] = this[4] * inverseScale0;\n result[5] = this[5] * inverseScale1;\n result[6] = this[6] * inverseScale2;\n result[7] = 0;\n result[8] = this[8] * inverseScale0;\n result[9] = this[9] * inverseScale1;\n result[10] = this[10] * inverseScale2;\n result[11] = 0;\n result[12] = 0;\n result[13] = 0;\n result[14] = 0;\n result[15] = 1;\n return result;\n }\n /**\n *\n * @param result\n * @param scaleResult\n * @returns self\n */\n getRotationMatrix3(result, scaleResult) {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = this[4] * inverseScale0;\n result[4] = this[5] * inverseScale1;\n result[5] = this[6] * inverseScale2;\n result[6] = this[8] * inverseScale0;\n result[7] = this[9] * inverseScale1;\n result[8] = this[10] * inverseScale2;\n return result;\n }\n // Modifiers\n transpose() {\n mat4_transpose(this, this);\n return this.check();\n }\n invert() {\n mat4_invert(this, this);\n return this.check();\n }\n // Operations\n multiplyLeft(a) {\n mat4_multiply(this, a, this);\n return this.check();\n }\n multiplyRight(a) {\n mat4_multiply(this, this, a);\n return this.check();\n }\n // Rotates a matrix by the given angle around the X axis\n rotateX(radians) {\n mat4_rotateX(this, this, radians);\n // mat4_rotate(this, this, radians, [1, 0, 0]);\n return this.check();\n }\n // Rotates a matrix by the given angle around the Y axis.\n rotateY(radians) {\n mat4_rotateY(this, this, radians);\n // mat4_rotate(this, this, radians, [0, 1, 0]);\n return this.check();\n }\n /**\n * Rotates a matrix by the given angle around the Z axis.\n * @param radians\n * @returns self\n */\n rotateZ(radians) {\n mat4_rotateZ(this, this, radians);\n // mat4_rotate(this, this, radians, [0, 0, 1]);\n return this.check();\n }\n /**\n *\n * @param param0\n * @returns self\n */\n rotateXYZ(angleXYZ) {\n return this.rotateX(angleXYZ[0]).rotateY(angleXYZ[1]).rotateZ(angleXYZ[2]);\n }\n /**\n *\n * @param radians\n * @param axis\n * @returns self\n */\n rotateAxis(radians, axis) {\n mat4_rotate(this, this, radians, axis);\n return this.check();\n }\n /**\n *\n * @param factor\n * @returns self\n */\n scale(factor) {\n mat4_scale(this, this, Array.isArray(factor) ? factor : [factor, factor, factor]);\n return this.check();\n }\n /**\n *\n * @param vec\n * @returns self\n */\n translate(vector) {\n mat4_translate(this, this, vector);\n return this.check();\n }\n // Transforms\n /**\n * Transforms any 2, 3 or 4 element vector. 2 and 3 elements are treated as points\n * @param vector\n * @param result\n * @returns self\n */\n transform(vector, result) {\n if (vector.length === 4) {\n result = vec4_transformMat4(result || [-0, -0, -0, -0], vector, this);\n checkVector(result, 4);\n return result;\n }\n return this.transformAsPoint(vector, result);\n }\n /**\n * Transforms any 2 or 3 element array as point (w implicitly 1)\n * @param vector\n * @param result\n * @returns self\n */\n transformAsPoint(vector, result) {\n const { length } = vector;\n let out;\n switch (length) {\n case 2:\n out = vec2_transformMat4(result || [-0, -0], vector, this);\n break;\n case 3:\n out = vec3_transformMat4(result || [-0, -0, -0], vector, this);\n break;\n default:\n throw new Error('Illegal vector');\n }\n checkVector(out, vector.length);\n return out;\n }\n /**\n * Transforms any 2 or 3 element array as vector (w implicitly 0)\n * @param vector\n * @param result\n * @returns self\n */\n transformAsVector(vector, result) {\n let out;\n switch (vector.length) {\n case 2:\n out = vec2_transformMat4AsVector(result || [-0, -0], vector, this);\n break;\n case 3:\n out = vec3_transformMat4AsVector(result || [-0, -0, -0], vector, this);\n break;\n default:\n throw new Error('Illegal vector');\n }\n checkVector(out, vector.length);\n return out;\n }\n /** @deprecated */\n transformPoint(vector, result) {\n return this.transformAsPoint(vector, result);\n }\n /** @deprecated */\n transformVector(vector, result) {\n return this.transformAsPoint(vector, result);\n }\n /** @deprecated */\n transformDirection(vector, result) {\n return this.transformAsVector(vector, result);\n }\n // three.js math API compatibility\n makeRotationX(radians) {\n return this.identity().rotateX(radians);\n }\n makeTranslation(x, y, z) {\n return this.identity().translate([x, y, z]);\n }\n}\n// TODO initializing static members directly is an option, but make sure no tree-shaking issues\nlet ZERO;\nlet IDENTITY;\nfunction getZeroMatrix() {\n if (!ZERO) {\n ZERO = new Matrix4([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n Object.freeze(ZERO);\n }\n return ZERO;\n}\nfunction getIdentityMatrix() {\n if (!IDENTITY) {\n IDENTITY = new Matrix4();\n Object.freeze(IDENTITY);\n }\n return IDENTITY;\n}\n// HELPER FUNCTIONS\nfunction checkRadians(possiblyDegrees) {\n if (possiblyDegrees > Math.PI * 2) {\n throw Error('expected radians');\n }\n}\n// eslint-disable-next-line max-params\nfunction computeInfinitePerspectiveOffCenter(result, left, right, bottom, top, near) {\n const column0Row0 = (2 * near) / (right - left);\n const column1Row1 = (2 * near) / (top - bottom);\n const column2Row0 = (right + left) / (right - left);\n const column2Row1 = (top + bottom) / (top - bottom);\n const column2Row2 = -1;\n const column2Row3 = -1;\n const column3Row2 = -2 * near;\n result[0] = column0Row0;\n result[1] = 0;\n result[2] = 0;\n result[3] = 0;\n result[4] = 0;\n result[5] = column1Row1;\n result[6] = 0;\n result[7] = 0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = 0;\n result[13] = 0;\n result[14] = column3Row2;\n result[15] = 0;\n return result;\n}\n","import { vec4 } from '@math.gl/core';\n// Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()\nexport function createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n// Transforms a vec4 with a projection matrix\nexport function transformVector(matrix, vector) {\n const result = vec4.transformMat4([], vector, matrix);\n vec4.scale(result, result, 1 / result[3]);\n return result;\n}\nexport function mod(value, divisor) {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nexport function lerp(start, end, step) {\n return step * end + (1 - step) * start;\n}\nexport function clamp(x, min, max) {\n return x < min ? min : x > max ? max : x;\n}\nfunction ieLog2(x) {\n return Math.log(x) * Math.LOG2E;\n}\n// Handle missing log2 in IE 11\nexport const log2 = Math.log2 || ieLog2;\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || '@math.gl/web-mercator: assertion failed.');\n }\n}\n","// TODO - THE UTILITIES IN THIS FILE SHOULD BE IMPORTED FROM WEB-MERCATOR-VIEWPORT MODULE\nimport { createMat4, transformVector, clamp, log2 } from \"./math-utils.js\";\nimport { mat4, vec2, vec3 } from '@math.gl/core';\nimport { assert } from \"./assert.js\";\n// CONSTANTS\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst DEGREES_TO_RADIANS = PI / 180;\nconst RADIANS_TO_DEGREES = 180 / PI;\nconst TILE_SIZE = 512;\n// Average circumference (40075 km equatorial, 40007 km meridional)\nconst EARTH_CIRCUMFERENCE = 40.03e6;\n// Latitude that makes a square world, 2 * atan(E ** PI) - PI / 2\nexport const MAX_LATITUDE = 85.051129;\n// Mapbox default altitude\nexport const DEFAULT_ALTITUDE = 1.5;\n/** Logarithimic zoom to linear scale **/\nexport function zoomToScale(zoom) {\n return Math.pow(2, zoom);\n}\n/** Linear scale to logarithimic zoom **/\nexport function scaleToZoom(scale) {\n return log2(scale);\n}\n/**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n *\n * @param lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return [x,y] coordinates.\n */\nexport function lngLatToWorld(lngLat) {\n const [lng, lat] = lngLat;\n assert(Number.isFinite(lng));\n assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, 'invalid latitude');\n const lambda2 = lng * DEGREES_TO_RADIANS;\n const phi2 = lat * DEGREES_TO_RADIANS;\n const x = (TILE_SIZE * (lambda2 + PI)) / (2 * PI);\n const y = (TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5)))) / (2 * PI);\n return [x, y];\n}\n/**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [x,y] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\nexport function worldToLngLat(xy) {\n const [x, y] = xy;\n const lambda2 = (x / TILE_SIZE) * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp((y / TILE_SIZE) * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\n/**\n * Returns the zoom level that gives a 1 meter pixel at a certain latitude\n * 1 = C*cos(y)/2^z/TILE_SIZE = C*cos(y)/2^(z+9)\n */\nexport function getMeterZoom(options) {\n const { latitude } = options;\n assert(Number.isFinite(latitude));\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\n/**\n * Calculate the conversion from meter to common units at a given latitude\n * This is a cheaper version of `getDistanceScales`\n * @param latitude center latitude in degrees\n * @returns common units per meter\n */\nexport function unitsPerMeter(latitude) {\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;\n}\n/**\n * Calculate distance scales in meters around current lat/lon, both for\n * degrees and pixels.\n * In mercator projection mode, the distance scales vary significantly\n * with latitude.\n */\nexport function getDistanceScales(options) {\n const { latitude, longitude, highPrecision = false } = options;\n assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n const worldSize = TILE_SIZE;\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n /**\n * Number of pixels occupied by one degree longitude around current lat/lon:\n unitsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)\n = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)\n unitsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)\n = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)\n */\n const unitsPerDegreeX = worldSize / 360;\n const unitsPerDegreeY = unitsPerDegreeX / latCosine;\n /**\n * Number of pixels occupied by one meter around current lat/lon:\n */\n const altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n /**\n * LngLat: longitude -> east and latitude -> north (bottom left)\n * UTM meter offset: x -> east and y -> north (bottom left)\n * World space: x -> east and y -> south (top left)\n *\n * Y needs to be flipped when converting delta degree/meter to delta pixels\n */\n const result = {\n unitsPerMeter: [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter],\n metersPerUnit: [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter],\n unitsPerDegree: [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter],\n degreesPerUnit: [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter]\n };\n /**\n * Taylor series 2nd order for 1/latCosine\n f'(a) * (x - a)\n = d(1/cos(lat * DEGREES_TO_RADIANS))/d(lat) * dLat\n = DEGREES_TO_RADIANS * tan(lat * DEGREES_TO_RADIANS) / cos(lat * DEGREES_TO_RADIANS) * dLat\n */\n if (highPrecision) {\n const latCosine2 = (DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS)) / latCosine;\n const unitsPerDegreeY2 = (unitsPerDegreeX * latCosine2) / 2;\n const altUnitsPerDegree2 = (worldSize / EARTH_CIRCUMFERENCE) * latCosine2;\n const altUnitsPerMeter2 = (altUnitsPerDegree2 / unitsPerDegreeY) * altUnitsPerMeter;\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n // Main results, used for converting meters to latlng deltas and scaling offsets\n return result;\n}\n/**\n * Offset a lng/lat position by meterOffset (northing, easting)\n */\nexport function addMetersToLngLat(lngLatZ, xyz) {\n const [longitude, latitude, z0] = lngLatZ;\n const [x, y, z] = xyz;\n const { unitsPerMeter, unitsPerMeter2 } = getDistanceScales({\n longitude,\n latitude,\n highPrecision: true\n });\n const worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n const newLngLat = worldToLngLat(worldspace);\n const newZ = (z0 || 0) + (z || 0);\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\n/**\n *\n * view and projection matrix creation is intentionally kept compatible with\n * mapbox-gl's implementation to ensure that seamless interoperation\n * with mapbox and react-map-gl. See: https://github.com/mapbox/mapbox-gl-js\n */\nexport function getViewMatrix(options) {\n const { \n // Viewport props\n height, pitch, bearing, altitude, \n // Pre-calculated parameters\n scale, center } = options;\n // VIEW MATRIX: PROJECTS MERCATOR WORLD COORDINATES\n // Note that mercator world coordinates typically need to be flipped\n //\n // Note: As usual, matrix operation orders should be read in reverse\n // since vectors will be multiplied from the right during transformation\n const vm = createMat4();\n // Move camera to altitude (along the pitch & bearing direction)\n mat4.translate(vm, vm, [0, 0, -altitude]);\n // Rotate by bearing, and then by pitch (which tilts the view)\n mat4.rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n mat4.rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n const relativeScale = scale / height;\n mat4.scale(vm, vm, [relativeScale, relativeScale, relativeScale]);\n if (center) {\n mat4.translate(vm, vm, vec3.negate([], center));\n }\n return vm;\n}\n/**\n * Calculates mapbox compatible projection matrix from parameters\n *\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns project parameters object\n */\nexport function getProjectionParameters(options) {\n const { width, height, altitude, pitch = 0, offset, center, scale, nearZMultiplier = 1, farZMultiplier = 1 } = options;\n let { fovy = altitudeToFovy(DEFAULT_ALTITUDE) } = options;\n // For back-compatibility allow field of view to be\n // derived from altitude\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n const fovRadians = fovy * DEGREES_TO_RADIANS;\n const pitchRadians = pitch * DEGREES_TO_RADIANS;\n // Distance from camera to the target\n const focalDistance = fovyToAltitude(fovy);\n let cameraToSeaLevelDistance = focalDistance;\n if (center) {\n cameraToSeaLevelDistance += (center[2] * scale) / Math.cos(pitchRadians) / height;\n }\n const fovAboveCenter = fovRadians * (0.5 + (offset ? offset[1] : 0) / height);\n // Find the distance from the center point to the center top\n // in focal distance units using law of sines.\n const topHalfSurfaceDistance = (Math.sin(fovAboveCenter) * cameraToSeaLevelDistance) /\n Math.sin(clamp(Math.PI / 2 - pitchRadians - fovAboveCenter, 0.01, Math.PI - 0.01));\n // Calculate z distance of the farthest fragment that should be rendered.\n const furthestDistance = Math.sin(pitchRadians) * topHalfSurfaceDistance + cameraToSeaLevelDistance;\n // Matches mapbox limit\n const horizonDistance = cameraToSeaLevelDistance * 10;\n // Calculate z value of the farthest fragment that should be rendered.\n const farZ = Math.min(furthestDistance * farZMultiplier, horizonDistance);\n return {\n fov: fovRadians,\n aspect: width / height,\n focalDistance,\n near: nearZMultiplier,\n far: farZ\n };\n}\n/**\n * CALCULATE PROJECTION MATRIX: PROJECTS FROM CAMERA (VIEW) SPACE TO CLIPSPACE\n *\n * To match mapbox's z buffer:\n * - \\<= 0.28: nearZMultiplier: 0.1, farZmultiplier: 1\n * - \\>= 0.29: nearZMultiplier: 1 / height, farZMultiplier: 1.01\n *\n * @param options Viewport options\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns 4x4 projection matrix\n */\nexport function getProjectionMatrix(options) {\n const { fov, aspect, near, far } = getProjectionParameters(options);\n const projectionMatrix = mat4.perspective([], fov, // fov in radians\n aspect, // aspect ratio\n near, // near plane\n far // far plane\n );\n return projectionMatrix;\n}\n/**\n *\n * Convert an altitude to field of view such that the\n * focal distance is equal to the altitude\n *\n * @param altitude - altitude of camera in screen units\n * @return fovy field of view in degrees\n */\nexport function altitudeToFovy(altitude) {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\n/**\n *\n * Convert an field of view such that the\n * focal distance is equal to the altitude\n *\n * @param fovy - field of view in degrees\n * @return altitude altitude of camera in screen units\n */\nexport function fovyToAltitude(fovy) {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\n// Project flat coordinates to pixels on screen.\nexport function worldToPixels(xyz, pixelProjectionMatrix) {\n const [x, y, z = 0] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\n/**\n * Unproject pixels on screen to flat coordinates.\n *\n * @param xyz - pixel coordinate on screen.\n * @param pixelUnprojectionMatrix - unprojection matrix 4x4\n * @param targetZ - if pixel coordinate does not have a 3rd component (depth),\n * targetZ is used as the elevation plane to unproject onto\n * @return [x, y, Z] flat coordinates on 512*512 Mercator Zoom 0 tile.\n */\nexport function pixelsToWorld(xyz, pixelUnprojectionMatrix, targetZ = 0) {\n const [x, y, z] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y), 'invalid pixel coordinate');\n if (Number.isFinite(z)) {\n // Has depth component\n const coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that line with z=0\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n const z0 = coord0[2];\n const z1 = coord1[2];\n const t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2.lerp([], coord0, coord1, t);\n}\n","import { assert } from \"./assert.js\";\nimport { log2, clamp } from \"./math-utils.js\";\nimport { MAX_LATITUDE, lngLatToWorld, worldToLngLat } from \"./web-mercator-utils.js\";\n/**\n * Returns map settings {latitude, longitude, zoom}\n * that will contain the provided corners within the provided width.\n *\n * > _Note: Only supports non-perspective mode._\n *\n * @param options fit bounds parameters\n * @returns - latitude, longitude and zoom\n */\nexport function fitBounds(options) {\n const { width, height, bounds, minExtent = 0, // 0.01 would be about 1000 meters (degree is ~110KM)\n maxZoom = 24, // ~x4,000,000 => About 10 meter extents\n offset = [0, 0] } = options;\n const [[west, south], [east, north]] = bounds;\n const padding = getPaddingObject(options.padding);\n const nw = lngLatToWorld([west, clamp(north, -MAX_LATITUDE, MAX_LATITUDE)]);\n const se = lngLatToWorld([east, clamp(south, -MAX_LATITUDE, MAX_LATITUDE)]);\n // width/height on the Web Mercator plane\n const size = [\n Math.max(Math.abs(se[0] - nw[0]), minExtent),\n Math.max(Math.abs(se[1] - nw[1]), minExtent)\n ];\n const targetSize = [\n width - padding.left - padding.right - Math.abs(offset[0]) * 2,\n height - padding.top - padding.bottom - Math.abs(offset[1]) * 2\n ];\n assert(targetSize[0] > 0 && targetSize[1] > 0);\n // scale = screen pixels per unit on the Web Mercator plane\n const scaleX = targetSize[0] / size[0];\n const scaleY = targetSize[1] / size[1];\n // Find how much we need to shift the center\n const offsetX = (padding.right - padding.left) / 2 / scaleX;\n const offsetY = (padding.top - padding.bottom) / 2 / scaleY;\n const center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n const centerLngLat = worldToLngLat(center);\n const zoom = Math.min(maxZoom, log2(Math.abs(Math.min(scaleX, scaleY))));\n assert(Number.isFinite(zoom));\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom\n };\n}\n// Helpers\nfunction getPaddingObject(padding = 0) {\n if (typeof padding === 'number') {\n return {\n top: padding,\n bottom: padding,\n left: padding,\n right: padding\n };\n }\n // Make sure all the required properties are set\n assert(Number.isFinite(padding.top) &&\n Number.isFinite(padding.bottom) &&\n Number.isFinite(padding.left) &&\n Number.isFinite(padding.right));\n return padding;\n}\n","/* eslint-disable camelcase */\nimport { vec2 } from '@math.gl/core';\nimport { worldToLngLat } from \"./web-mercator-utils.js\";\nimport { transformVector } from \"./math-utils.js\";\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n/*\n * Returns the quad at the intersection of the frustum and the given z plane\n * @param {WebMercatorViewport} viewport\n * @param {Number} z - elevation in meters\n */\nexport function getBounds(viewport, z = 0) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { width, height, unproject } = viewport;\n const unprojectOps = { targetZ: z };\n const bottomLeft = unproject([0, height], unprojectOps);\n const bottomRight = unproject([width, height], unprojectOps);\n let topLeft;\n let topRight;\n const halfFov = viewport.fovy\n ? 0.5 * viewport.fovy * DEGREES_TO_RADIANS\n : Math.atan(0.5 / viewport.altitude);\n const angleToGround = (90 - viewport.pitch) * DEGREES_TO_RADIANS;\n // The top plane is parallel to the ground if halfFov == angleToGround\n if (halfFov > angleToGround - 0.01) {\n // intersect with the far plane\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n }\n else {\n // intersect with the top plane\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n/*\n * Find a point on the far clipping plane of the viewport\n * @param {WebMercatorViewport} viewport\n * @param {Number} x - projected x in screen space\n * @param {Number} targetZ - the elevation of the point in meters\n */\nfunction unprojectOnFarPlane(viewport, x, targetZ) {\n const { pixelUnprojectionMatrix } = viewport;\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n const z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n const t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n const coord = vec2.lerp([], coord0, coord1, t);\n const result = worldToLngLat(coord);\n result.push(targetZ);\n return result;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport log from \"../utils/log.js\";\nimport { createMat4, getCameraPosition, getFrustumPlanes } from \"../utils/math-utils.js\";\nimport { Matrix4, Vector3, equals, clamp, mat4 } from '@math.gl/core';\nimport { getDistanceScales, getMeterZoom, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld } from '@math.gl/web-mercator';\nimport { PROJECTION_MODE } from \"../lib/constants.js\";\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nconst IDENTITY = createMat4();\nconst ZERO_VECTOR = [0, 0, 0];\nconst DEFAULT_DISTANCE_SCALES = {\n unitsPerMeter: [1, 1, 1],\n metersPerUnit: [1, 1, 1]\n};\n// / Helpers\nfunction createProjectionMatrix({ width, height, orthographic, fovyRadians, focalDistance, padding, near, far }) {\n const aspect = width / height;\n const matrix = orthographic\n ? new Matrix4().orthographic({ fovy: fovyRadians, aspect, focalDistance, near, far })\n : new Matrix4().perspective({ fovy: fovyRadians, aspect, near, far });\n if (padding) {\n const { left = 0, right = 0, top = 0, bottom = 0 } = padding;\n const offsetX = clamp((left + width - right) / 2, 0, width) - width / 2;\n const offsetY = clamp((top + height - bottom) / 2, 0, height) - height / 2;\n // pixels to clip space\n matrix[8] -= (offsetX * 2) / width;\n matrix[9] += (offsetY * 2) / height;\n }\n return matrix;\n}\n/**\n * Manages coordinate system transformations.\n *\n * Note: The Viewport is immutable in the sense that it only has accessors.\n * A new viewport instance should be created if any parameters have changed.\n */\nexport default class Viewport {\n static { this.displayName = 'Viewport'; }\n // eslint-disable-next-line complexity\n constructor(opts = {}) {\n this._frustumPlanes = {};\n // @ts-ignore\n this.id = opts.id || this.constructor.displayName || 'viewport';\n this.x = opts.x || 0;\n this.y = opts.y || 0;\n // Silently allow apps to send in w,h = 0,0\n this.width = opts.width || 1;\n this.height = opts.height || 1;\n this.zoom = opts.zoom || 0;\n this.padding = opts.padding;\n this.distanceScales = opts.distanceScales || DEFAULT_DISTANCE_SCALES;\n this.focalDistance = opts.focalDistance || 1;\n this.position = opts.position || ZERO_VECTOR;\n this.modelMatrix = opts.modelMatrix || null;\n const { longitude, latitude } = opts;\n this.isGeospatial = Number.isFinite(latitude) && Number.isFinite(longitude);\n this._initProps(opts);\n this._initMatrices(opts);\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.projectPosition = this.projectPosition.bind(this);\n this.unprojectPosition = this.unprojectPosition.bind(this);\n this.projectFlat = this.projectFlat.bind(this);\n this.unprojectFlat = this.unprojectFlat.bind(this);\n }\n get subViewports() {\n return null;\n }\n get metersPerPixel() {\n return this.distanceScales.metersPerUnit[2] / this.scale;\n }\n get projectionMode() {\n if (this.isGeospatial) {\n return this.zoom < 12\n ? PROJECTION_MODE.WEB_MERCATOR\n : PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET;\n }\n return PROJECTION_MODE.IDENTITY;\n }\n // Two viewports are equal if width and height are identical, and if\n // their view and projection matrices are (approximately) equal.\n equals(viewport) {\n if (!(viewport instanceof Viewport)) {\n return false;\n }\n if (this === viewport) {\n return true;\n }\n return (viewport.width === this.width &&\n viewport.height === this.height &&\n viewport.scale === this.scale &&\n equals(viewport.projectionMatrix, this.projectionMatrix) &&\n equals(viewport.viewMatrix, this.viewMatrix));\n // TODO - check distance scales?\n }\n /**\n * Projects xyz (possibly latitude and longitude) to pixel coordinates in window\n * using viewport projection parameters\n * - [longitude, latitude] to [x, y]\n * - [longitude, latitude, Z] => [x, y, z]\n * Note: By default, returns top-left coordinates for canvas/SVG type render\n *\n * @param {Array} lngLatZ - [lng, lat] or [lng, lat, Z]\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether projected coords are top left\n * @return {Array} - [x, y] or [x, y, z] in top left coords\n */\n project(xyz, { topLeft = true } = {}) {\n const worldPosition = this.projectPosition(xyz);\n const coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n const [x, y] = coord;\n const y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(xyz, { topLeft = true, targetZ } = {}) {\n const [x, y, z] = xyz;\n const y2 = topLeft ? y : this.height - y;\n const targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n const coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n const [X, Y, Z] = this.unprojectPosition(coord);\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];\n }\n // NON_LINEAR PROJECTION HOOKS\n // Used for web meractor projection\n projectPosition(xyz) {\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n }\n unprojectPosition(xyz) {\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n }\n /**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n * @param {Array} lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return {Array} [x,y] coordinates.\n */\n projectFlat(xyz) {\n if (this.isGeospatial) {\n // Shader clamps latitude to +-89.9, see /shaderlib/project/project.glsl.js\n // lngLatToWorld([0, -89.9])[1] = -317.9934163758329\n // lngLatToWorld([0, 89.9])[1] = 829.9934163758271\n const result = lngLatToWorld(xyz);\n result[1] = clamp(result[1], -318, 830);\n return result;\n }\n return xyz;\n }\n /**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n * @param {object|Vector} xy - object with {x,y} members\n * representing point on projected map plane\n * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\n unprojectFlat(xyz) {\n if (this.isGeospatial) {\n return worldToLngLat(xyz);\n }\n return xyz;\n }\n /**\n * Get bounds of the current viewport\n * @return {Array} - [minX, minY, maxX, maxY]\n */\n getBounds(options = {}) {\n const unprojectOption = { targetZ: options.z || 0 };\n const topLeft = this.unproject([0, 0], unprojectOption);\n const topRight = this.unproject([this.width, 0], unprojectOption);\n const bottomLeft = this.unproject([0, this.height], unprojectOption);\n const bottomRight = this.unproject([this.width, this.height], unprojectOption);\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n getDistanceScales(coordinateOrigin) {\n if (coordinateOrigin) {\n return getDistanceScales({\n longitude: coordinateOrigin[0],\n latitude: coordinateOrigin[1],\n highPrecision: true\n });\n }\n return this.distanceScales;\n }\n containsPixel({ x, y, width = 1, height = 1 }) {\n return (x < this.x + this.width &&\n this.x < x + width &&\n y < this.y + this.height &&\n this.y < y + height);\n }\n // Extract frustum planes in common space\n getFrustumPlanes() {\n if (this._frustumPlanes.near) {\n // @ts-ignore\n return this._frustumPlanes;\n }\n Object.assign(this._frustumPlanes, getFrustumPlanes(this.viewProjectionMatrix));\n // @ts-ignore\n return this._frustumPlanes;\n }\n // EXPERIMENTAL METHODS\n /**\n * Needed by panning and linear transition\n * Pan the viewport to place a given world coordinate at screen point [x, y]\n *\n * @param {Array} coords - world coordinates\n * @param {Array} pixel - [x,y] coordinates on screen\n * @return {Object} props of the new viewport\n */\n panByPosition(coords, pixel) {\n return null;\n }\n // INTERNAL METHODS\n /* eslint-disable complexity, max-statements */\n _initProps(opts) {\n const longitude = opts.longitude;\n const latitude = opts.latitude;\n if (this.isGeospatial) {\n if (!Number.isFinite(opts.zoom)) {\n this.zoom = getMeterZoom({ latitude }) + Math.log2(this.focalDistance);\n }\n this.distanceScales = opts.distanceScales || getDistanceScales({ latitude, longitude });\n }\n const scale = Math.pow(2, this.zoom);\n this.scale = scale;\n const { position, modelMatrix } = opts;\n let meterOffset = ZERO_VECTOR;\n if (position) {\n meterOffset = modelMatrix\n ? new Matrix4(modelMatrix).transformAsVector(position, [])\n : position;\n }\n if (this.isGeospatial) {\n // Determine camera center in common space\n const center = this.projectPosition([longitude, latitude, 0]);\n this.center = new Vector3(meterOffset)\n // Convert to pixels in current zoom\n .scale(this.distanceScales.unitsPerMeter)\n .add(center);\n }\n else {\n this.center = this.projectPosition(meterOffset);\n }\n }\n /* eslint-enable complexity, max-statements */\n _initMatrices(opts) {\n const { \n // View matrix\n viewMatrix = IDENTITY, \n // Projection matrix\n projectionMatrix = null, \n // Projection matrix parameters, used if projectionMatrix not supplied\n orthographic = false, fovyRadians, fovy = 75, near = 0.1, // Distance of near clipping plane\n far = 1000, // Distance of far clipping plane\n padding = null, // Center offset in pixels\n focalDistance = 1 } = opts;\n this.viewMatrixUncentered = viewMatrix;\n // Make a centered version of the matrix for projection modes without an offset\n this.viewMatrix = new Matrix4()\n // Apply the uncentered view matrix\n .multiplyRight(viewMatrix)\n // And center it\n .translate(new Vector3(this.center).negate());\n this.projectionMatrix =\n projectionMatrix ||\n createProjectionMatrix({\n width: this.width,\n height: this.height,\n orthographic,\n fovyRadians: fovyRadians || fovy * DEGREES_TO_RADIANS,\n focalDistance,\n padding,\n near,\n far\n });\n // Note: As usual, matrix operations should be applied in \"reverse\" order\n // since vectors will be multiplied in from the right during transformation\n const vpm = createMat4();\n mat4.multiply(vpm, vpm, this.projectionMatrix);\n mat4.multiply(vpm, vpm, this.viewMatrix);\n this.viewProjectionMatrix = vpm;\n // console.log('VPM', this.viewMatrix, this.projectionMatrix, this.viewProjectionMatrix);\n // Calculate inverse view matrix\n this.viewMatrixInverse = mat4.invert([], this.viewMatrix) || this.viewMatrix;\n // Decompose camera parameters\n this.cameraPosition = getCameraPosition(this.viewMatrixInverse);\n /*\n * Builds matrices that converts preprojected lngLats to screen pixels\n * and vice versa.\n * Note: Currently returns bottom-left coordinates!\n * Note: Starts with the GL projection matrix and adds steps to the\n * scale and translate that matrix onto the window.\n * Note: WebGL controls clip space to screen projection with gl.viewport\n * and does not need this step.\n */\n // matrix for conversion from world location to screen (pixel) coordinates\n const viewportMatrix = createMat4(); // matrix from NDC to viewport.\n const pixelProjectionMatrix = createMat4(); // matrix from world space to viewport.\n mat4.scale(viewportMatrix, viewportMatrix, [this.width / 2, -this.height / 2, 1]);\n mat4.translate(viewportMatrix, viewportMatrix, [1, -1, 0]);\n mat4.multiply(pixelProjectionMatrix, viewportMatrix, this.viewProjectionMatrix);\n this.pixelProjectionMatrix = pixelProjectionMatrix;\n this.pixelUnprojectionMatrix = mat4.invert(createMat4(), this.pixelProjectionMatrix);\n if (!this.pixelUnprojectionMatrix) {\n log.warn('Pixel project matrix not invertible')();\n // throw new Error('Pixel project matrix not invertible');\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { Timeline } from '@luma.gl/engine';\nimport { getShaderAssembler } from \"../shaderlib/index.js\";\nimport { LIFECYCLE } from \"../lifecycle/constants.js\";\nimport log from \"../utils/log.js\";\nimport debug from \"../debug/index.js\";\nimport { flatten } from \"../utils/flatten.js\";\nimport { Stats } from '@probe.gl/stats';\nimport ResourceManager from \"./resource/resource-manager.js\";\nimport Viewport from \"../viewports/viewport.js\";\nconst TRACE_SET_LAYERS = 'layerManager.setLayers';\nconst TRACE_ACTIVATE_VIEWPORT = 'layerManager.activateViewport';\nexport default class LayerManager {\n /**\n * @param device\n * @param param1\n */\n // eslint-disable-next-line\n constructor(device, props) {\n this._lastRenderedLayers = [];\n this._needsRedraw = false;\n this._needsUpdate = false;\n this._nextLayers = null;\n this._debug = false;\n // This flag is separate from _needsUpdate because it can be set during an update and should trigger another full update\n this._defaultShaderModulesChanged = false;\n //\n // INTERNAL METHODS\n //\n /** Make a viewport \"current\" in layer context, updating viewportChanged flags */\n this.activateViewport = (viewport) => {\n debug(TRACE_ACTIVATE_VIEWPORT, this, viewport);\n if (viewport) {\n this.context.viewport = viewport;\n }\n };\n const { deck, stats, viewport, timeline } = props || {};\n // Currently deck.gl expects the DeckGL.layers array to be different\n // whenever React rerenders. If the same layers array is used, the\n // LayerManager's diffing algorithm will generate a fatal error and\n // break the rendering.\n // `this._lastRenderedLayers` stores the UNFILTERED layers sent\n // down to LayerManager, so that `layers` reference can be compared.\n // If it's the same across two React render calls, the diffing logic\n // will be skipped.\n this.layers = [];\n this.resourceManager = new ResourceManager({ device, protocol: 'deck://' });\n this.context = {\n mousePosition: null,\n userData: {},\n layerManager: this,\n device,\n // @ts-expect-error\n gl: device?.gl,\n deck,\n shaderAssembler: getShaderAssembler(),\n defaultShaderModules: [],\n renderPass: undefined,\n stats: stats || new Stats({ id: 'deck.gl' }),\n // Make sure context.viewport is not empty on the first layer initialization\n viewport: viewport || new Viewport({ id: 'DEFAULT-INITIAL-VIEWPORT' }), // Current viewport, exposed to layers for project* function\n timeline: timeline || new Timeline(),\n resourceManager: this.resourceManager,\n onError: undefined\n };\n Object.seal(this);\n }\n /** Method to call when the layer manager is not needed anymore. */\n finalize() {\n this.resourceManager.finalize();\n // Finalize all layers\n for (const layer of this.layers) {\n this._finalizeLayer(layer);\n }\n }\n /** Check if a redraw is needed */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n // This layers list doesn't include sublayers, relying on composite layers\n for (const layer of this.layers) {\n // Call every layer to clear their flags\n const layerNeedsRedraw = layer.getNeedsRedraw(opts);\n redraw = redraw || layerNeedsRedraw;\n }\n return redraw;\n }\n /** Check if a deep update of all layers is needed */\n needsUpdate() {\n if (this._nextLayers && this._nextLayers !== this._lastRenderedLayers) {\n // New layers array may be the same as the old one if `setProps` is called by React\n return 'layers changed';\n }\n if (this._defaultShaderModulesChanged) {\n return 'shader modules changed';\n }\n return this._needsUpdate;\n }\n /** Layers will be redrawn (in next animation frame) */\n setNeedsRedraw(reason) {\n this._needsRedraw = this._needsRedraw || reason;\n }\n /** Layers will be updated deeply (in next animation frame)\n Potentially regenerating attributes and sub layers */\n setNeedsUpdate(reason) {\n this._needsUpdate = this._needsUpdate || reason;\n }\n /** Gets a list of currently rendered layers. Optionally filter by id. */\n getLayers({ layerIds } = {}) {\n // Filtering by layerId compares beginning of strings, so that sublayers will be included\n // Dependes on the convention of adding suffixes to the parent's layer name\n return layerIds\n ? this.layers.filter(layer => layerIds.find(layerId => layer.id.indexOf(layerId) === 0))\n : this.layers;\n }\n /** Set props needed for layer rendering and picking. */\n setProps(props) {\n if ('debug' in props) {\n this._debug = props.debug;\n }\n // A way for apps to add data to context that can be accessed in layers\n if ('userData' in props) {\n this.context.userData = props.userData;\n }\n // New layers will be processed in `updateLayers` in the next update cycle\n if ('layers' in props) {\n this._nextLayers = props.layers;\n }\n if ('onError' in props) {\n this.context.onError = props.onError;\n }\n }\n /** Supply a new layer list, initiating sublayer generation and layer matching */\n setLayers(newLayers, reason) {\n debug(TRACE_SET_LAYERS, this, reason, newLayers);\n this._lastRenderedLayers = newLayers;\n const flatLayers = flatten(newLayers, Boolean);\n for (const layer of flatLayers) {\n layer.context = this.context;\n }\n this._updateLayers(this.layers, flatLayers);\n }\n /** Update layers from last cycle if `setNeedsUpdate()` has been called */\n updateLayers() {\n // NOTE: For now, even if only some layer has changed, we update all layers\n // to ensure that layer id maps etc remain consistent even if different\n // sublayers are rendered\n const reason = this.needsUpdate();\n if (reason) {\n this.setNeedsRedraw(`updating layers: ${reason}`);\n // Force a full update\n this.setLayers(this._nextLayers || this._lastRenderedLayers, reason);\n }\n // Updated, clear the backlog\n this._nextLayers = null;\n }\n /** Register a default shader module */\n addDefaultShaderModule(module) {\n const { defaultShaderModules } = this.context;\n if (!defaultShaderModules.find(m => m.name === module.name)) {\n defaultShaderModules.push(module);\n this._defaultShaderModulesChanged = true;\n }\n }\n /** Deregister a default shader module */\n removeDefaultShaderModule(module) {\n const { defaultShaderModules } = this.context;\n const i = defaultShaderModules.findIndex(m => m.name === module.name);\n if (i >= 0) {\n defaultShaderModules.splice(i, 1);\n this._defaultShaderModulesChanged = true;\n }\n }\n _handleError(stage, error, layer) {\n layer.raiseError(error, `${stage} of ${layer}`);\n }\n // TODO - mark layers with exceptions as bad and remove from rendering cycle?\n /** Match all layers, checking for caught errors\n to avoid having an exception in one layer disrupt other layers */\n _updateLayers(oldLayers, newLayers) {\n // Create old layer map\n const oldLayerMap = {};\n for (const oldLayer of oldLayers) {\n if (oldLayerMap[oldLayer.id]) {\n log.warn(`Multiple old layers with same id ${oldLayer.id}`)();\n }\n else {\n oldLayerMap[oldLayer.id] = oldLayer;\n }\n }\n if (this._defaultShaderModulesChanged) {\n for (const layer of oldLayers) {\n layer.setNeedsUpdate();\n layer.setChangeFlags({ extensionsChanged: true });\n }\n this._defaultShaderModulesChanged = false;\n }\n // Allocate array for generated layers\n const generatedLayers = [];\n // Match sublayers\n this._updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers);\n // Finalize unmatched layers\n this._finalizeOldLayers(oldLayerMap);\n let needsUpdate = false;\n for (const layer of generatedLayers) {\n if (layer.hasUniformTransition()) {\n needsUpdate = `Uniform transition in ${layer}`;\n break;\n }\n }\n this._needsUpdate = needsUpdate;\n this.layers = generatedLayers;\n }\n /* eslint-disable complexity,max-statements */\n // Note: adds generated layers to `generatedLayers` array parameter\n _updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers) {\n for (const newLayer of newLayers) {\n newLayer.context = this.context;\n // Given a new coming layer, find its matching old layer (if any)\n const oldLayer = oldLayerMap[newLayer.id];\n if (oldLayer === null) {\n // null, rather than undefined, means this id was originally there\n log.warn(`Multiple new layers with same id ${newLayer.id}`)();\n }\n // Remove the old layer from candidates, as it has been matched with this layer\n oldLayerMap[newLayer.id] = null;\n let sublayers = null;\n // We must not generate exceptions until after layer matching is complete\n try {\n if (this._debug && oldLayer !== newLayer) {\n newLayer.validateProps();\n }\n if (!oldLayer) {\n this._initializeLayer(newLayer);\n }\n else {\n this._transferLayerState(oldLayer, newLayer);\n this._updateLayer(newLayer);\n }\n generatedLayers.push(newLayer);\n // Call layer lifecycle method: render sublayers\n sublayers = newLayer.isComposite ? newLayer.getSubLayers() : null;\n // End layer lifecycle method: render sublayers\n }\n catch (err) {\n this._handleError('matching', err, newLayer); // Record first exception\n }\n if (sublayers) {\n this._updateSublayersRecursively(sublayers, oldLayerMap, generatedLayers);\n }\n }\n }\n /* eslint-enable complexity,max-statements */\n // Finalize any old layers that were not matched\n _finalizeOldLayers(oldLayerMap) {\n for (const layerId in oldLayerMap) {\n const layer = oldLayerMap[layerId];\n if (layer) {\n this._finalizeLayer(layer);\n }\n }\n }\n // / EXCEPTION SAFE LAYER ACCESS\n /** Safely initializes a single layer, calling layer methods */\n _initializeLayer(layer) {\n try {\n layer._initialize();\n layer.lifecycle = LIFECYCLE.INITIALIZED;\n }\n catch (err) {\n this._handleError('initialization', err, layer);\n // TODO - what should the lifecycle state be here? LIFECYCLE.INITIALIZATION_FAILED?\n }\n }\n /** Transfer state from one layer to a newer version */\n _transferLayerState(oldLayer, newLayer) {\n newLayer._transferState(oldLayer);\n newLayer.lifecycle = LIFECYCLE.MATCHED;\n if (newLayer !== oldLayer) {\n oldLayer.lifecycle = LIFECYCLE.AWAITING_GC;\n }\n }\n /** Safely updates a single layer, cleaning all flags */\n _updateLayer(layer) {\n try {\n layer._update();\n }\n catch (err) {\n this._handleError('update', err, layer);\n }\n }\n /** Safely finalizes a single layer, removing all resources */\n _finalizeLayer(layer) {\n this._needsRedraw = this._needsRedraw || `finalized ${layer}`;\n layer.lifecycle = LIFECYCLE.AWAITING_FINALIZATION;\n try {\n layer._finalize();\n layer.lifecycle = LIFECYCLE.FINALIZED;\n }\n catch (err) {\n this._handleError('finalization', err, layer);\n }\n }\n}\n","/**\n * Fast partial deep equal for prop.\n *\n * @param a Prop\n * @param b Prop to compare against `a`\n * @param depth Depth to which to recurse in nested Objects/Arrays. Use 0 (default) for shallow comparison, -1 for infinite depth\n */\n/* eslint-disable complexity */\nexport function deepEqual(a, b, depth) {\n if (a === b) {\n return true;\n }\n if (!depth || !a || !b) {\n return false;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], depth - 1)) {\n return false;\n }\n }\n return true;\n }\n if (Array.isArray(b)) {\n return false;\n }\n if (typeof a === 'object' && typeof b === 'object') {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n if (!deepEqual(a[key], b[key], depth - 1)) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport log from \"../utils/log.js\";\nimport { flatten } from \"../utils/flatten.js\";\nexport default class ViewManager {\n constructor(props) {\n // List of view descriptors, gets re-evaluated when width/height changes\n this.views = [];\n this.width = 100;\n this.height = 100;\n this.viewState = {};\n this.controllers = {};\n this.timeline = props.timeline;\n this._viewports = []; // Generated viewports\n this._viewportMap = {};\n this._isUpdating = false;\n this._needsRedraw = 'First render';\n this._needsUpdate = 'Initialize';\n this._eventManager = props.eventManager;\n this._eventCallbacks = {\n onViewStateChange: props.onViewStateChange,\n onInteractionStateChange: props.onInteractionStateChange\n };\n Object.seal(this);\n // Init with default map viewport\n this.setProps(props);\n }\n /** Remove all resources and event listeners */\n finalize() {\n for (const key in this.controllers) {\n const controller = this.controllers[key];\n if (controller) {\n controller.finalize();\n }\n }\n this.controllers = {};\n }\n /** Check if a redraw is needed */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n /** Mark the manager as dirty. Will rebuild all viewports and update controllers. */\n setNeedsUpdate(reason) {\n this._needsUpdate = this._needsUpdate || reason;\n this._needsRedraw = this._needsRedraw || reason;\n }\n /** Checks each viewport for transition updates */\n updateViewStates() {\n for (const viewId in this.controllers) {\n const controller = this.controllers[viewId];\n if (controller) {\n controller.updateTransition();\n }\n }\n }\n /** Get a set of viewports for a given width and height\n * TODO - Intention is for deck.gl to autodeduce width and height and drop the need for props\n * @param rect (object, optional) - filter the viewports\n * + not provided - return all viewports\n * + {x, y} - only return viewports that contain this pixel\n * + {x, y, width, height} - only return viewports that overlap with this rectangle\n */\n getViewports(rect) {\n if (rect) {\n return this._viewports.filter(viewport => viewport.containsPixel(rect));\n }\n return this._viewports;\n }\n /** Get a map of all views */\n getViews() {\n const viewMap = {};\n this.views.forEach(view => {\n viewMap[view.id] = view;\n });\n return viewMap;\n }\n /** Resolves a viewId string to a View */\n getView(viewId) {\n return this.views.find(view => view.id === viewId);\n }\n /** Returns the viewState for a specific viewId. Matches the viewState by\n 1. view.viewStateId\n 2. view.id\n 3. root viewState\n then applies the view's filter if any */\n getViewState(viewOrViewId) {\n const view = typeof viewOrViewId === 'string' ? this.getView(viewOrViewId) : viewOrViewId;\n // Backward compatibility: view state for single view\n const viewState = (view && this.viewState[view.getViewStateId()]) || this.viewState;\n return view ? view.filterViewState(viewState) : viewState;\n }\n getViewport(viewId) {\n return this._viewportMap[viewId];\n }\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(xyz, opts) {\n const viewports = this.getViewports();\n const pixel = { x: xyz[0], y: xyz[1] };\n for (let i = viewports.length - 1; i >= 0; --i) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n const p = xyz.slice();\n p[0] -= viewport.x;\n p[1] -= viewport.y;\n return viewport.unproject(p, opts);\n }\n }\n return null;\n }\n /** Update the manager with new Deck props */\n setProps(props) {\n if (props.views) {\n this._setViews(props.views);\n }\n if (props.viewState) {\n this._setViewState(props.viewState);\n }\n if ('width' in props || 'height' in props) {\n this._setSize(props.width, props.height);\n }\n // Important: avoid invoking _update() inside itself\n // Nested updates result in unexpected side effects inside _rebuildViewports()\n // when using auto control in pure-js\n if (!this._isUpdating) {\n this._update();\n }\n }\n //\n // PRIVATE METHODS\n //\n _update() {\n this._isUpdating = true;\n // Only rebuild viewports if the update flag is set\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n // If viewport transition(s) are triggered during viewports update, controller(s)\n // will immediately call `onViewStateChange` which calls `viewManager.setProps` again.\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n this._isUpdating = false;\n }\n _setSize(width, height) {\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n this.setNeedsUpdate('Size changed');\n }\n }\n // Update the view descriptor list and set change flag if needed\n // Does not actually rebuild the `Viewport`s until `getViewports` is called\n _setViews(views) {\n views = flatten(views, Boolean);\n const viewsChanged = this._diffViews(views, this.views);\n if (viewsChanged) {\n this.setNeedsUpdate('views changed');\n }\n this.views = views;\n }\n _setViewState(viewState) {\n if (viewState) {\n // depth = 3 when comparing viewStates: viewId.position.0\n const viewStateChanged = !deepEqual(viewState, this.viewState, 3);\n if (viewStateChanged) {\n this.setNeedsUpdate('viewState changed');\n }\n this.viewState = viewState;\n }\n else {\n log.warn('missing `viewState` or `initialViewState`')();\n }\n }\n _createController(view, props) {\n const Controller = props.type;\n const controller = new Controller({\n timeline: this.timeline,\n eventManager: this._eventManager,\n // Set an internal callback that calls the prop callback if provided\n onViewStateChange: this._eventCallbacks.onViewStateChange,\n onStateChange: this._eventCallbacks.onInteractionStateChange,\n makeViewport: viewState => this.getView(view.id)?.makeViewport({\n viewState,\n width: this.width,\n height: this.height\n })\n });\n return controller;\n }\n _updateController(view, viewState, viewport, controller) {\n const controllerProps = view.controller;\n if (controllerProps && viewport) {\n const resolvedProps = {\n ...viewState,\n ...controllerProps,\n id: view.id,\n x: viewport.x,\n y: viewport.y,\n width: viewport.width,\n height: viewport.height\n };\n // Create controller if not already existing or if the type of the\n // controller has changed.\n if (!controller || controller.constructor !== controllerProps.type) {\n controller = this._createController(view, resolvedProps);\n }\n if (controller) {\n controller.setProps(resolvedProps);\n }\n return controller;\n }\n return null;\n }\n // Rebuilds viewports from descriptors towards a certain window size\n _rebuildViewports() {\n const { views } = this;\n const oldControllers = this.controllers;\n this._viewports = [];\n this.controllers = {};\n let invalidateControllers = false;\n // Create controllers in reverse order, so that views on top receive events first\n for (let i = views.length; i--;) {\n const view = views[i];\n const viewState = this.getViewState(view);\n const viewport = view.makeViewport({ viewState, width: this.width, height: this.height });\n let oldController = oldControllers[view.id];\n const hasController = Boolean(view.controller);\n if (hasController && !oldController) {\n // When a new controller is added, invalidate all controllers below it so that\n // events are registered in the correct order\n invalidateControllers = true;\n }\n if ((invalidateControllers || !hasController) && oldController) {\n // Remove and reattach invalidated controller\n oldController.finalize();\n oldController = null;\n }\n // Update the controller\n this.controllers[view.id] = this._updateController(view, viewState, viewport, oldController);\n if (viewport) {\n this._viewports.unshift(viewport);\n }\n }\n // Remove unused controllers\n for (const id in oldControllers) {\n const oldController = oldControllers[id];\n if (oldController && !this.controllers[id]) {\n oldController.finalize();\n }\n }\n this._buildViewportMap();\n }\n _buildViewportMap() {\n // Build a view id to view index\n this._viewportMap = {};\n this._viewports.forEach(viewport => {\n if (viewport.id) {\n // TODO - issue warning if multiple viewports use same id\n this._viewportMap[viewport.id] = this._viewportMap[viewport.id] || viewport;\n }\n });\n }\n // Check if viewport array has changed, returns true if any change\n // Note that descriptors can be the same\n _diffViews(newViews, oldViews) {\n if (newViews.length !== oldViews.length) {\n return true;\n }\n return newViews.some((_, i) => !newViews[i].equals(oldViews[i]));\n }\n}\n","const PERCENT_OR_PIXELS_REGEX = /([0-9]+\\.?[0-9]*)(%|px)/;\n// Takes a number or a string of formats `50%`, `33.3%` or `200px`\nexport function parsePosition(value) {\n switch (typeof value) {\n case 'number':\n return {\n position: value,\n relative: false\n };\n case 'string':\n const match = PERCENT_OR_PIXELS_REGEX.exec(value);\n if (match && match.length >= 3) {\n const relative = match[2] === '%';\n const position = parseFloat(match[1]);\n return {\n position: relative ? position / 100 : position,\n relative\n };\n }\n // fallthrough\n default:\n // eslint-disable-line\n throw new Error(`Could not parse position string ${value}`);\n }\n}\nexport function getPosition(position, extent) {\n return position.relative ? Math.round(position.position * extent) : position.position;\n}\n","import { parsePosition, getPosition } from \"../utils/positions.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nexport default class View {\n constructor(props) {\n const { id, x = 0, y = 0, width = '100%', height = '100%', padding = null } = props;\n // @ts-ignore\n this.id = id || this.constructor.displayName || 'view';\n this.props = { ...props, id: this.id };\n // Extents\n this._x = parsePosition(x);\n this._y = parsePosition(y);\n this._width = parsePosition(width);\n this._height = parsePosition(height);\n this._padding = padding && {\n left: parsePosition(padding.left || 0),\n right: parsePosition(padding.right || 0),\n top: parsePosition(padding.top || 0),\n bottom: parsePosition(padding.bottom || 0)\n };\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n Object.seal(this);\n }\n equals(view) {\n if (this === view) {\n return true;\n }\n // To correctly compare padding use depth=2\n return this.ViewportType === view.ViewportType && deepEqual(this.props, view.props, 2);\n }\n /** Make viewport from canvas dimensions and view state */\n makeViewport({ width, height, viewState }) {\n viewState = this.filterViewState(viewState);\n // Resolve relative viewport dimensions\n const viewportDimensions = this.getDimensions({ width, height });\n if (!viewportDimensions.height || !viewportDimensions.width) {\n return null;\n }\n return new this.ViewportType({ ...viewState, ...this.props, ...viewportDimensions });\n }\n getViewStateId() {\n const { viewState } = this.props;\n if (typeof viewState === 'string') {\n // if View.viewState is a string, return it\n return viewState;\n }\n return viewState?.id || this.id;\n }\n // Allows view to override (or completely define) viewState\n filterViewState(viewState) {\n if (this.props.viewState && typeof this.props.viewState === 'object') {\n // If we have specified an id, then intent is to override,\n // If not, completely specify the view state\n if (!this.props.viewState.id) {\n return this.props.viewState;\n }\n // Merge in all props from View's viewState, except id\n const newViewState = { ...viewState };\n for (const key in this.props.viewState) {\n if (key !== 'id') {\n newViewState[key] = this.props.viewState[key];\n }\n }\n return newViewState;\n }\n return viewState;\n }\n /** Resolve the dimensions of the view from overall canvas dimensions */\n getDimensions({ width, height }) {\n const dimensions = {\n x: getPosition(this._x, width),\n y: getPosition(this._y, height),\n width: getPosition(this._width, width),\n height: getPosition(this._height, height)\n };\n if (this._padding) {\n dimensions.padding = {\n left: getPosition(this._padding.left, width),\n top: getPosition(this._padding.top, height),\n right: getPosition(this._padding.right, width),\n bottom: getPosition(this._padding.bottom, height)\n };\n }\n return dimensions;\n }\n // Used by sub classes to resolve controller props\n get controller() {\n const opts = this.props.controller;\n if (!opts) {\n return null;\n }\n if (opts === true) {\n return { type: this.ControllerType };\n }\n if (typeof opts === 'function') {\n return { type: opts };\n }\n return { type: this.ControllerType, ...opts };\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n// View and Projection Matrix calculations for mapbox-js style\n// map view properties\nimport Viewport from \"./viewport.js\";\nimport { pixelsToWorld, getViewMatrix, addMetersToLngLat, unitsPerMeter, getProjectionParameters, altitudeToFovy, fovyToAltitude, fitBounds, getBounds } from '@math.gl/web-mercator';\nimport { Matrix4, clamp, vec2 } from '@math.gl/core';\n/**\n * Manages transformations to/from WGS84 coordinates using the Web Mercator Projection.\n */\nexport default class WebMercatorViewport extends Viewport {\n static { this.displayName = 'WebMercatorViewport'; }\n /* eslint-disable complexity, max-statements */\n constructor(opts = {}) {\n const { latitude = 0, longitude = 0, zoom = 0, pitch = 0, bearing = 0, nearZMultiplier = 0.1, farZMultiplier = 1.01, nearZ, farZ, orthographic = false, projectionMatrix, repeat = false, worldOffset = 0, position, padding, \n // backward compatibility\n // TODO: remove in v9\n legacyMeterSizes = false } = opts;\n let { width, height, altitude = 1.5 } = opts;\n const scale = Math.pow(2, zoom);\n // Silently allow apps to send in 0,0 to facilitate isomorphic render etc\n width = width || 1;\n height = height || 1;\n let fovy;\n let projectionParameters = null;\n if (projectionMatrix) {\n altitude = projectionMatrix[5] / 2;\n fovy = altitudeToFovy(altitude);\n }\n else {\n if (opts.fovy) {\n fovy = opts.fovy;\n altitude = fovyToAltitude(fovy);\n }\n else {\n fovy = altitudeToFovy(altitude);\n }\n let offset;\n if (padding) {\n const { top = 0, bottom = 0 } = padding;\n offset = [0, clamp((top + height - bottom) / 2, 0, height) - height / 2];\n }\n projectionParameters = getProjectionParameters({\n width,\n height,\n scale,\n center: position && [0, 0, position[2] * unitsPerMeter(latitude)],\n offset,\n pitch,\n fovy,\n nearZMultiplier,\n farZMultiplier\n });\n if (Number.isFinite(nearZ)) {\n projectionParameters.near = nearZ;\n }\n if (Number.isFinite(farZ)) {\n projectionParameters.far = farZ;\n }\n }\n // The uncentered matrix allows us two move the center addition to the\n // shader (cheap) which gives a coordinate system that has its center in\n // the layer's center position. This makes rotations and other modelMatrx\n // transforms much more useful.\n let viewMatrixUncentered = getViewMatrix({\n height,\n pitch,\n bearing,\n scale,\n altitude\n });\n if (worldOffset) {\n const viewOffset = new Matrix4().translate([512 * worldOffset, 0, 0]);\n viewMatrixUncentered = viewOffset.multiplyLeft(viewMatrixUncentered);\n }\n super({\n ...opts,\n // x, y,\n width,\n height,\n // view matrix\n viewMatrix: viewMatrixUncentered,\n longitude,\n latitude,\n zoom,\n // projection matrix parameters\n ...projectionParameters,\n fovy,\n focalDistance: altitude\n });\n // Save parameters\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n this.orthographic = orthographic;\n this._subViewports = repeat ? [] : null;\n this._pseudoMeters = legacyMeterSizes;\n Object.freeze(this);\n }\n /* eslint-enable complexity, max-statements */\n get subViewports() {\n if (this._subViewports && !this._subViewports.length) {\n // Cache sub viewports so that we only calculate them once\n const bounds = this.getBounds();\n const minOffset = Math.floor((bounds[0] + 180) / 360);\n const maxOffset = Math.ceil((bounds[2] - 180) / 360);\n for (let x = minOffset; x <= maxOffset; x++) {\n const offsetViewport = x\n ? new WebMercatorViewport({\n ...this,\n worldOffset: x\n })\n : this;\n this._subViewports.push(offsetViewport);\n }\n }\n return this._subViewports;\n }\n projectPosition(xyz) {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.projectPosition(xyz);\n }\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * unitsPerMeter(xyz[1]);\n return [X, Y, Z];\n }\n unprojectPosition(xyz) {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.unprojectPosition(xyz);\n }\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) / unitsPerMeter(Y);\n return [X, Y, Z];\n }\n /**\n * Add a meter delta to a base lnglat coordinate, returning a new lnglat array\n *\n * Note: Uses simple linear approximation around the viewport center\n * Error increases with size of offset (roughly 1% per 100km)\n *\n * @param {[Number,Number]|[Number,Number,Number]) lngLatZ - base coordinate\n * @param {[Number,Number]|[Number,Number,Number]) xyz - array of meter deltas\n * @return {[Number,Number]|[Number,Number,Number]) array of [lng,lat,z] deltas\n */\n addMetersToLngLat(lngLatZ, xyz) {\n return addMetersToLngLat(lngLatZ, xyz);\n }\n panByPosition(coords, pixel) {\n const fromLocation = pixelsToWorld(pixel, this.pixelUnprojectionMatrix);\n const toLocation = this.projectFlat(coords);\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n const [longitude, latitude] = this.unprojectFlat(newCenter);\n return { longitude, latitude };\n }\n getBounds(options = {}) {\n // @ts-ignore\n const corners = getBounds(this, options.z || 0);\n return [\n Math.min(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.min(corners[0][1], corners[1][1], corners[2][1], corners[3][1]),\n Math.max(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.max(corners[0][1], corners[1][1], corners[2][1], corners[3][1])\n ];\n }\n /**\n * Returns a new viewport that fit around the given rectangle.\n * Only supports non-perspective mode.\n */\n fitBounds(\n /** [[lon, lat], [lon, lat]] */\n bounds, options = {}) {\n const { width, height } = this;\n const { longitude, latitude, zoom } = fitBounds({ width, height, bounds, ...options });\n return new WebMercatorViewport({ width, height, longitude, latitude, zoom });\n }\n}\n","export default class Transition {\n /**\n * @params timeline {Timeline}\n */\n constructor(timeline) {\n this._inProgress = false;\n this._handle = null;\n this.time = 0;\n // @ts-expect-error\n this.settings = {\n duration: 0\n };\n this._timeline = timeline;\n }\n /* Public API */\n get inProgress() {\n return this._inProgress;\n }\n /**\n * (re)start this transition.\n * @params props {object} - optional overriding props. see constructor\n */\n start(settings) {\n this.cancel();\n // @ts-expect-error\n this.settings = settings;\n this._inProgress = true;\n this.settings.onStart?.(this);\n }\n /**\n * end this transition if it is in progress.\n */\n end() {\n if (this._inProgress) {\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n this.settings.onEnd?.(this);\n }\n }\n /**\n * cancel this transition if it is in progress.\n */\n cancel() {\n if (this._inProgress) {\n this.settings.onInterrupt?.(this);\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n }\n }\n /**\n * update this transition. Returns `true` if updated.\n */\n update() {\n if (!this._inProgress) {\n return false;\n }\n // It is important to initialize the handle during `update` instead of `start`.\n // The CPU time that the `start` frame takes should not be counted towards the duration.\n // On the other hand, `update` always happens during a render cycle. The clock starts when the\n // transition is rendered for the first time.\n if (this._handle === null) {\n const { _timeline: timeline, settings } = this;\n this._handle = timeline.addChannel({\n delay: timeline.getTime(),\n duration: settings.duration\n });\n }\n this.time = this._timeline.getTime(this._handle);\n // Call subclass method\n this._onUpdate();\n // Call user callback\n this.settings.onUpdate?.(this);\n // This only works if `settings.duration` is set\n // Spring transition must call `end` manually\n if (this._timeline.isFinished(this._handle)) {\n this.end();\n }\n return true;\n }\n /* Private API */\n _onUpdate() {\n // for subclass override\n }\n}\n","import Transition from \"../transitions/transition.js\";\nconst noop = () => { };\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport const TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3\n};\nconst DEFAULT_EASING = t => t;\nconst DEFAULT_INTERRUPTION = TRANSITION_EVENTS.BREAK;\nexport default class TransitionManager {\n constructor(opts) {\n this._onTransitionUpdate = transition => {\n // NOTE: Be cautious re-ordering statements in this function.\n const { time, settings: { interpolator, startProps, endProps, duration, easing } } = transition;\n const t = easing(time / duration);\n const viewport = interpolator.interpolateProps(startProps, endProps, t);\n // This gurantees all props (e.g. bearing, longitude) are normalized\n // So when viewports are compared they are in same range.\n this.propsInTransition = this.getControllerState({\n ...this.props,\n ...viewport\n }).getViewportProps();\n this.onViewStateChange({\n viewState: this.propsInTransition,\n oldViewState: this.props\n });\n };\n this.getControllerState = opts.getControllerState;\n this.propsInTransition = null;\n this.transition = new Transition(opts.timeline);\n this.onViewStateChange = opts.onViewStateChange || noop;\n this.onStateChange = opts.onStateChange || noop;\n }\n finalize() {\n this.transition.cancel();\n }\n // Returns current transitioned viewport.\n getViewportInTransition() {\n return this.propsInTransition;\n }\n // Process the vewiport change, either ignore or trigger a new transition.\n // Return true if a new transition is triggered, false otherwise.\n processViewStateChange(nextProps) {\n let transitionTriggered = false;\n const currentProps = this.props;\n // Set this.props here as '_triggerTransition' calls '_updateViewport' that uses this.props.\n this.props = nextProps;\n // NOTE: Be cautious re-ordering statements in this function.\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n if (this._isTransitionEnabled(nextProps)) {\n let startProps = currentProps;\n if (this.transition.inProgress) {\n // @ts-expect-error\n const { interruption, endProps } = this.transition.settings;\n startProps = {\n ...currentProps,\n ...(interruption === TRANSITION_EVENTS.SNAP_TO_END\n ? endProps\n : this.propsInTransition || currentProps)\n };\n }\n this._triggerTransition(startProps, nextProps);\n transitionTriggered = true;\n }\n else {\n this.transition.cancel();\n }\n return transitionTriggered;\n }\n updateTransition() {\n this.transition.update();\n }\n // Helper methods\n _isTransitionEnabled(props) {\n const { transitionDuration, transitionInterpolator } = props;\n return ((transitionDuration > 0 || transitionDuration === 'auto') &&\n Boolean(transitionInterpolator));\n }\n _isUpdateDueToCurrentTransition(props) {\n if (this.transition.inProgress && this.propsInTransition) {\n // @ts-expect-error\n return this.transition.settings.interpolator.arePropsEqual(props, this.propsInTransition);\n }\n return false;\n }\n _shouldIgnoreViewportChange(currentProps, nextProps) {\n if (this.transition.inProgress) {\n // @ts-expect-error\n const transitionSettings = this.transition.settings;\n // Ignore update if it is requested to be ignored\n return (transitionSettings.interruption === TRANSITION_EVENTS.IGNORE ||\n // Ignore update if it is due to current active transition.\n this._isUpdateDueToCurrentTransition(nextProps));\n }\n if (this._isTransitionEnabled(nextProps)) {\n // Ignore if none of the viewport props changed.\n return nextProps.transitionInterpolator.arePropsEqual(currentProps, nextProps);\n }\n return true;\n }\n _triggerTransition(startProps, endProps) {\n const startViewstate = this.getControllerState(startProps);\n const endViewStateProps = this.getControllerState(endProps).shortestPathFrom(startViewstate);\n // update transitionDuration for 'auto' mode\n const transitionInterpolator = endProps.transitionInterpolator;\n const duration = transitionInterpolator.getDuration\n ? transitionInterpolator.getDuration(startProps, endProps)\n : endProps.transitionDuration;\n if (duration === 0) {\n return;\n }\n const initialProps = transitionInterpolator.initializeProps(startProps, endViewStateProps);\n this.propsInTransition = {};\n const transitionSettings = {\n duration,\n easing: endProps.transitionEasing || DEFAULT_EASING,\n interpolator: transitionInterpolator,\n interruption: endProps.transitionInterruption || DEFAULT_INTERRUPTION,\n startProps: initialProps.start,\n endProps: initialProps.end,\n onStart: endProps.onTransitionStart,\n onUpdate: this._onTransitionUpdate,\n onInterrupt: this._onTransitionEnd(endProps.onTransitionInterrupt),\n onEnd: this._onTransitionEnd(endProps.onTransitionEnd)\n };\n this.transition.start(transitionSettings);\n this.onStateChange({ inTransition: true });\n this.updateTransition();\n }\n _onTransitionEnd(callback) {\n return transition => {\n this.propsInTransition = null;\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n callback?.(transition);\n };\n }\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'deck.gl: assertion failed.');\n }\n}\n","import { equals } from '@math.gl/core';\nimport assert from \"../utils/assert.js\";\nexport default class TransitionInterpolator {\n /**\n * @param opts {array|object}\n * @param opts.compare {array} - prop names used in equality check\n * @param opts.extract {array} - prop names needed for interpolation\n * @param opts.required {array} - prop names that must be supplied\n * alternatively, supply one list of prop names as `opts` if all of the above are the same.\n */\n constructor(opts) {\n const { compare, extract, required } = opts;\n this._propsToCompare = compare;\n this._propsToExtract = extract || compare;\n this._requiredProps = required;\n }\n /**\n * Checks if two sets of props need transition in between\n * @param currentProps {object} - a list of viewport props\n * @param nextProps {object} - a list of viewport props\n * @returns {bool} - true if two props are equivalent\n */\n arePropsEqual(currentProps, nextProps) {\n for (const key of this._propsToCompare) {\n if (!(key in currentProps) ||\n !(key in nextProps) ||\n !equals(currentProps[key], nextProps[key])) {\n return false;\n }\n }\n return true;\n }\n /**\n * Called before transition starts to validate/pre-process start and end props\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Object} {start, end} - start and end props to be passed\n * to `interpolateProps`\n */\n initializeProps(startProps, endProps) {\n const startViewStateProps = {};\n const endViewStateProps = {};\n for (const key of this._propsToExtract) {\n if (key in startProps || key in endProps) {\n startViewStateProps[key] = startProps[key];\n endViewStateProps[key] = endProps[key];\n }\n }\n this._checkRequiredProps(startViewStateProps);\n this._checkRequiredProps(endViewStateProps);\n return { start: startViewStateProps, end: endViewStateProps };\n }\n /**\n * Returns transition duration\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Number} - transition duration in milliseconds\n */\n getDuration(startProps, endProps) {\n return endProps.transitionDuration;\n }\n _checkRequiredProps(props) {\n if (!this._requiredProps) {\n return;\n }\n this._requiredProps.forEach(propName => {\n const value = props[propName];\n assert(Number.isFinite(value) || Array.isArray(value), `${propName} is required for transition`);\n });\n }\n}\n","import TransitionInterpolator from \"./transition-interpolator.js\";\nimport { lerp } from '@math.gl/core';\nconst DEFAULT_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];\nconst DEFAULT_REQUIRED_PROPS = ['longitude', 'latitude', 'zoom'];\n/**\n * Performs linear interpolation of two view states.\n */\nexport default class LinearInterpolator extends TransitionInterpolator {\n /**\n * @param {Object} opts\n * @param {Array} opts.transitionProps - list of props to apply linear transition to.\n * @param {Array} opts.around - a screen point to zoom/rotate around.\n * @param {Function} opts.makeViewport - construct a viewport instance with given props.\n */\n constructor(opts = {}) {\n // Backward compatibility\n const transitionProps = Array.isArray(opts) ? opts : opts.transitionProps;\n const normalizedOpts = Array.isArray(opts) ? {} : opts;\n normalizedOpts.transitionProps = Array.isArray(transitionProps)\n ? {\n compare: transitionProps,\n required: transitionProps\n }\n : transitionProps || {\n compare: DEFAULT_PROPS,\n required: DEFAULT_REQUIRED_PROPS\n };\n super(normalizedOpts.transitionProps);\n this.opts = normalizedOpts;\n }\n initializeProps(startProps, endProps) {\n const result = super.initializeProps(startProps, endProps);\n const { makeViewport, around } = this.opts;\n if (makeViewport && around) {\n const startViewport = makeViewport(startProps);\n const endViewport = makeViewport(endProps);\n const aroundPosition = startViewport.unproject(around);\n result.start.around = around;\n Object.assign(result.end, {\n around: endViewport.project(aroundPosition),\n aroundPosition,\n width: endProps.width,\n height: endProps.height\n });\n }\n return result;\n }\n interpolateProps(startProps, endProps, t) {\n const propsInTransition = {};\n for (const key of this._propsToExtract) {\n propsInTransition[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n if (endProps.aroundPosition && this.opts.makeViewport) {\n // Linear transition should be performed in common space\n const viewport = this.opts.makeViewport({ ...endProps, ...propsInTransition });\n Object.assign(propsInTransition, viewport.panByPosition(endProps.aroundPosition, \n // anchor point in current screen coordinates\n lerp(startProps.around, endProps.around, t)));\n }\n return propsInTransition;\n }\n}\n","// Copyright (c) 2015 Uber Technologies, Inc.\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable max-statements, complexity */\nimport TransitionManager from \"./transition-manager.js\";\nimport LinearInterpolator from \"../transitions/linear-interpolator.js\";\nconst NO_TRANSITION_PROPS = {\n transitionDuration: 0\n};\nconst DEFAULT_INERTIA = 300;\nconst INERTIA_EASING = t => 1 - (1 - t) * (1 - t);\nconst EVENT_TYPES = {\n WHEEL: ['wheel'],\n PAN: ['panstart', 'panmove', 'panend'],\n PINCH: ['pinchstart', 'pinchmove', 'pinchend'],\n TRIPLE_PAN: ['tripanstart', 'tripanmove', 'tripanend'],\n DOUBLE_TAP: ['doubletap'],\n KEYBOARD: ['keydown']\n};\nconst pinchEventWorkaround = {};\nexport default class Controller {\n constructor(opts) {\n this.state = {};\n this._events = {};\n this._interactionState = {\n isDragging: false\n };\n this._customEvents = [];\n this._eventStartBlocked = null;\n this._panMove = false;\n this.invertPan = false;\n this.dragMode = 'rotate';\n this.inertia = 0;\n this.scrollZoom = true;\n this.dragPan = true;\n this.dragRotate = true;\n this.doubleClickZoom = true;\n this.touchZoom = true;\n this.touchRotate = false;\n this.keyboard = true;\n this.transitionManager = new TransitionManager({\n ...opts,\n getControllerState: props => new this.ControllerState(props),\n onViewStateChange: this._onTransition.bind(this),\n onStateChange: this._setInteractionState.bind(this)\n });\n this.handleEvent = this.handleEvent.bind(this);\n this.eventManager = opts.eventManager;\n this.onViewStateChange = opts.onViewStateChange || (() => { });\n this.onStateChange = opts.onStateChange || (() => { });\n this.makeViewport = opts.makeViewport;\n }\n set events(customEvents) {\n this.toggleEvents(this._customEvents, false);\n this.toggleEvents(customEvents, true);\n this._customEvents = customEvents;\n // Make sure default events are not overwritten\n if (this.props) {\n this.setProps(this.props);\n }\n }\n finalize() {\n for (const eventName in this._events) {\n if (this._events[eventName]) {\n // @ts-ignore (2345) event type string cannot be assifned to enum\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager?.off(eventName, this.handleEvent);\n }\n }\n this.transitionManager.finalize();\n }\n /**\n * Callback for events\n */\n handleEvent(event) {\n // Force recalculate controller state\n this._controllerState = undefined;\n const eventStartBlocked = this._eventStartBlocked;\n switch (event.type) {\n case 'panstart':\n return eventStartBlocked ? false : this._onPanStart(event);\n case 'panmove':\n return this._onPan(event);\n case 'panend':\n return this._onPanEnd(event);\n case 'pinchstart':\n return eventStartBlocked ? false : this._onPinchStart(event);\n case 'pinchmove':\n return this._onPinch(event);\n case 'pinchend':\n return this._onPinchEnd(event);\n case 'tripanstart':\n return eventStartBlocked ? false : this._onTriplePanStart(event);\n case 'tripanmove':\n return this._onTriplePan(event);\n case 'tripanend':\n return this._onTriplePanEnd(event);\n case 'doubletap':\n return this._onDoubleTap(event);\n case 'wheel':\n return this._onWheel(event);\n case 'keydown':\n return this._onKeyDown(event);\n default:\n return false;\n }\n }\n /* Event utils */\n // Event object: http://hammerjs.github.io/api/#event-object\n get controllerState() {\n this._controllerState = this._controllerState || new this.ControllerState({\n makeViewport: this.makeViewport,\n ...this.props,\n ...this.state\n });\n return this._controllerState;\n }\n getCenter(event) {\n const { x, y } = this.props;\n const { offsetCenter } = event;\n return [offsetCenter.x - x, offsetCenter.y - y];\n }\n isPointInBounds(pos, event) {\n const { width, height } = this.props;\n if (event && event.handled) {\n return false;\n }\n const inside = pos[0] >= 0 && pos[0] <= width && pos[1] >= 0 && pos[1] <= height;\n if (inside && event) {\n event.stopPropagation();\n }\n return inside;\n }\n isFunctionKeyPressed(event) {\n const { srcEvent } = event;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n isDragging() {\n return this._interactionState.isDragging || false;\n }\n // When a multi-touch event ends, e.g. pinch, not all pointers are lifted at the same time.\n // This triggers a brief `pan` event.\n // Calling this method will temporarily disable *start events to avoid conflicting transitions.\n blockEvents(timeout) {\n /* global setTimeout */\n const timer = setTimeout(() => {\n if (this._eventStartBlocked === timer) {\n this._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n /**\n * Extract interactivity options\n */\n setProps(props) {\n if (props.dragMode) {\n this.dragMode = props.dragMode;\n }\n this.props = props;\n if (!('transitionInterpolator' in props)) {\n // Add default transition interpolator\n props.transitionInterpolator = this._getTransitionProps().transitionInterpolator;\n }\n this.transitionManager.processViewStateChange(props);\n const { inertia } = props;\n this.inertia = Number.isFinite(inertia) ? inertia : (inertia === true ? DEFAULT_INERTIA : 0);\n // TODO - make sure these are not reset on every setProps\n const { scrollZoom = true, dragPan = true, dragRotate = true, doubleClickZoom = true, touchZoom = true, touchRotate = false, keyboard = true } = props;\n // Register/unregister events\n const isInteractive = Boolean(this.onViewStateChange);\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);\n // We always need the pan events to set the correct isDragging state, even if dragPan & dragRotate are both false\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive);\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.TRIPLE_PAN, isInteractive && touchRotate);\n this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && doubleClickZoom);\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);\n // Interaction toggles\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n updateTransition() {\n this.transitionManager.updateTransition();\n }\n toggleEvents(eventNames, enabled) {\n if (this.eventManager) {\n eventNames.forEach(eventName => {\n if (this._events[eventName] !== enabled) {\n this._events[eventName] = enabled;\n if (enabled) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.on(eventName, this.handleEvent);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.off(eventName, this.handleEvent);\n }\n }\n });\n }\n }\n // Private Methods\n /* Callback util */\n // formats map state and invokes callback function\n updateViewport(newControllerState, extraProps = null, interactionState = {}) {\n const viewState = { ...newControllerState.getViewportProps(), ...extraProps };\n // TODO - to restore diffing, we need to include interactionState\n const changed = this.controllerState !== newControllerState;\n // const oldViewState = this.controllerState.getViewportProps();\n // const changed = Object.keys(viewState).some(key => oldViewState[key] !== viewState[key]);\n this.state = newControllerState.getState();\n this._setInteractionState(interactionState);\n if (changed) {\n const oldViewState = this.controllerState && this.controllerState.getViewportProps();\n if (this.onViewStateChange) {\n this.onViewStateChange({ viewState, interactionState: this._interactionState, oldViewState, viewId: this.props.id });\n }\n }\n }\n _onTransition(params) {\n this.onViewStateChange({ ...params, interactionState: this._interactionState, viewId: this.props.id });\n }\n _setInteractionState(newStates) {\n Object.assign(this._interactionState, newStates);\n this.onStateChange(this._interactionState);\n }\n /* Event handlers */\n // Default handler for the `panstart` event.\n _onPanStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n let alternateMode = this.isFunctionKeyPressed(event) || event.rightButton || false;\n if (this.invertPan || this.dragMode === 'pan') {\n // invertPan is replaced by props.dragMode, keeping for backward compatibility\n alternateMode = !alternateMode;\n }\n const newControllerState = this.controllerState[alternateMode ? 'panStart' : 'rotateStart']({\n pos\n });\n this._panMove = alternateMode;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n // Default handler for the `panmove` and `panend` event.\n _onPan(event) {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMove(event) : this._onPanRotate(event);\n }\n _onPanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMoveEnd(event) : this._onPanRotateEnd(event);\n }\n // Default handler for panning to move.\n // Called by `_onPan` when panning without function key pressed.\n _onPanMove(event) {\n if (!this.dragPan) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.pan({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: true\n });\n return true;\n }\n _onPanMoveEnd(event) {\n const { inertia } = this;\n if (this.dragPan && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.pan({ pos: endPos }).panEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isPanning: true\n });\n }\n else {\n const newControllerState = this.controllerState.panEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false\n });\n }\n return true;\n }\n // Default handler for panning to rotate.\n // Called by `_onPan` when panning with function key pressed.\n _onPanRotate(event) {\n if (!this.dragRotate) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.rotate({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n _onPanRotateEnd(event) {\n const { inertia } = this;\n if (this.dragRotate && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.rotate({ pos: endPos }).rotateEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isRotating: true\n });\n }\n else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n // Default handler for the `wheel` event.\n _onWheel(event) {\n if (!this.scrollZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n event.srcEvent.preventDefault();\n const { speed = 0.01, smooth = false } = this.scrollZoom === true ? {} : this.scrollZoom;\n const { delta } = event;\n // Map wheel delta to relative scale\n let scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n const newControllerState = this.controllerState.zoom({ pos, scale });\n this.updateViewport(newControllerState, { ...this._getTransitionProps({ around: pos }), transitionDuration: smooth ? 250 : 1 }, {\n isZooming: true,\n isPanning: true\n });\n return true;\n }\n _onTriplePanStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.rotateStart({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n _onTriplePan(event) {\n if (!this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n const pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n const newControllerState = this.controllerState.rotate({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n _onTriplePanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n const { inertia } = this;\n if (this.touchRotate && inertia && event.velocityY) {\n const pos = this.getCenter(event);\n const endPos = [pos[0], (pos[1] += (event.velocityY * inertia) / 2)];\n const newControllerState = this.controllerState.rotate({ pos: endPos });\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isRotating: true\n });\n this.blockEvents(inertia);\n }\n else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n // Default handler for the `pinchstart` event.\n _onPinchStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.zoomStart({ pos }).rotateStart({ pos });\n // hack - hammer's `rotation` field doesn't seem to produce the correct angle\n pinchEventWorkaround._startPinchRotation = event.rotation;\n pinchEventWorkaround._lastPinchEvent = event;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n // Default handler for the `pinchmove` and `pinchend` events.\n _onPinch(event) {\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n let newControllerState = this.controllerState;\n if (this.touchZoom) {\n const { scale } = event;\n const pos = this.getCenter(event);\n newControllerState = newControllerState.zoom({ pos, scale });\n }\n if (this.touchRotate) {\n const { rotation } = event;\n newControllerState = newControllerState.rotate({\n deltaAngleX: pinchEventWorkaround._startPinchRotation - rotation\n });\n }\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: this.touchRotate\n });\n pinchEventWorkaround._lastPinchEvent = event;\n return true;\n }\n _onPinchEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n const { inertia } = this;\n const { _lastPinchEvent } = pinchEventWorkaround;\n if (this.touchZoom && inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n const pos = this.getCenter(event);\n let newControllerState = this.controllerState.rotateEnd();\n const z = Math.log2(event.scale);\n const velocityZ = (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n const endScale = Math.pow(2, z + (velocityZ * inertia) / 2);\n newControllerState = newControllerState.zoom({ pos, scale: endScale }).zoomEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps({ around: pos }),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: false\n });\n this.blockEvents(inertia);\n }\n else {\n const newControllerState = this.controllerState.zoomEnd().rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n }\n pinchEventWorkaround._startPinchRotation = null;\n pinchEventWorkaround._lastPinchEvent = null;\n return true;\n }\n // Default handler for the `doubletap` event.\n _onDoubleTap(event) {\n if (!this.doubleClickZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const isZoomOut = this.isFunctionKeyPressed(event);\n const newControllerState = this.controllerState.zoom({ pos, scale: isZoomOut ? 0.5 : 2 });\n this.updateViewport(newControllerState, this._getTransitionProps({ around: pos }), {\n isZooming: true,\n isPanning: true\n });\n this.blockEvents(100);\n return true;\n }\n // Default handler for the `keydown` event\n _onKeyDown(event) {\n if (!this.keyboard) {\n return false;\n }\n const funcKey = this.isFunctionKeyPressed(event);\n // @ts-ignore\n const { zoomSpeed, moveSpeed, rotateSpeedX, rotateSpeedY } = this.keyboard === true ? {} : this.keyboard;\n const { controllerState } = this;\n let newControllerState;\n const interactionState = {};\n switch (event.srcEvent.code) {\n case 'Minus':\n newControllerState = funcKey\n ? controllerState.zoomOut(zoomSpeed).zoomOut(zoomSpeed)\n : controllerState.zoomOut(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'Equal':\n newControllerState = funcKey\n ? controllerState.zoomIn(zoomSpeed).zoomIn(zoomSpeed)\n : controllerState.zoomIn(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'ArrowLeft':\n if (funcKey) {\n newControllerState = controllerState.rotateLeft(rotateSpeedX);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveLeft(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowRight':\n if (funcKey) {\n newControllerState = controllerState.rotateRight(rotateSpeedX);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveRight(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowUp':\n if (funcKey) {\n newControllerState = controllerState.rotateUp(rotateSpeedY);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveUp(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowDown':\n if (funcKey) {\n newControllerState = controllerState.rotateDown(rotateSpeedY);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveDown(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n default:\n return false;\n }\n this.updateViewport(newControllerState, this._getTransitionProps(), interactionState);\n return true;\n }\n _getTransitionProps(opts) {\n const { transition } = this;\n if (!transition || !transition.transitionInterpolator) {\n return NO_TRANSITION_PROPS;\n }\n // Enables Transitions on double-tap and key-down events.\n return opts\n ? {\n ...transition,\n transitionInterpolator: new LinearInterpolator({\n ...opts,\n ...transition.transitionInterpolator.opts,\n makeViewport: this.controllerState.makeViewport\n })\n }\n : transition;\n }\n}\n","export default class ViewState {\n constructor(props, state) {\n this._viewportProps = this.applyConstraints(props);\n this._state = state;\n }\n getViewportProps() {\n return this._viewportProps;\n }\n getState() {\n return this._state;\n }\n}\n","import { clamp } from '@math.gl/core';\nimport Controller from \"./controller.js\";\nimport ViewState from \"./view-state.js\";\nimport { normalizeViewportProps } from '@math.gl/web-mercator';\nimport assert from \"../utils/assert.js\";\nimport LinearInterpolator from \"../transitions/linear-interpolator.js\";\nconst PITCH_MOUSE_THRESHOLD = 5;\nconst PITCH_ACCEL = 1.2;\n/* Utils */\nexport class MapState extends ViewState {\n constructor(options) {\n const { \n /** Mapbox viewport properties */\n /** The width of the viewport */\n width, \n /** The height of the viewport */\n height, \n /** The latitude at the center of the viewport */\n latitude, \n /** The longitude at the center of the viewport */\n longitude, \n /** The tile zoom level of the map. */\n zoom, \n /** The bearing of the viewport in degrees */\n bearing = 0, \n /** The pitch of the viewport in degrees */\n pitch = 0, \n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude = 1.5, \n /** Viewport position */\n position = [0, 0, 0], \n /** Viewport constraints */\n maxZoom = 20, minZoom = 0, maxPitch = 60, minPitch = 0, \n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat, \n /* Center of the zoom when the operation first started */\n startZoomLngLat, \n /* Pointer position when rotation started */\n startRotatePos, \n /** Bearing when current perspective rotate operation started */\n startBearing, \n /** Pitch when current perspective rotate operation started */\n startPitch, \n /** Zoom when current zoom operation started */\n startZoom, \n /** Normalize viewport props to fit map height into viewport */\n normalize = true } = options;\n assert(Number.isFinite(longitude)); // `longitude` must be supplied\n assert(Number.isFinite(latitude)); // `latitude` must be supplied\n assert(Number.isFinite(zoom)); // `zoom` must be supplied\n super({\n width,\n height,\n latitude,\n longitude,\n zoom,\n bearing,\n pitch,\n altitude,\n maxZoom,\n minZoom,\n maxPitch,\n minPitch,\n normalize,\n position\n }, {\n startPanLngLat,\n startZoomLngLat,\n startRotatePos,\n startBearing,\n startPitch,\n startZoom\n });\n this.makeViewport = options.makeViewport;\n }\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({ pos }) {\n return this._getUpdatedState({\n startPanLngLat: this._unproject(pos)\n });\n }\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n * @param {[Number, Number], optional} startPos - where the pointer grabbed at\n * the start of the operation. Must be supplied of `panStart()` was not called\n */\n pan({ pos, startPos }) {\n const startPanLngLat = this.getState().startPanLngLat || this._unproject(startPos);\n if (!startPanLngLat) {\n return this;\n }\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanLngLat, pos);\n return this._getUpdatedState(newProps);\n }\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd() {\n return this._getUpdatedState({\n startPanLngLat: null\n });\n }\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotateStart({ pos }) {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotate({ pos, deltaAngleX = 0, deltaAngleY = 0 }) {\n const { startRotatePos, startBearing, startPitch } = this.getState();\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n let newRotation;\n if (pos) {\n newRotation = this._getNewRotation(pos, startRotatePos, startPitch, startBearing);\n }\n else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n return this._getUpdatedState(newRotation);\n }\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd() {\n return this._getUpdatedState({\n startBearing: null,\n startPitch: null\n });\n }\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n zoomStart({ pos }) {\n return this._getUpdatedState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({ pos, startPos, scale }) {\n // Make sure we zoom around the current mouse position rather than map center\n let { startZoom, startZoomLngLat } = this.getState();\n if (!startZoomLngLat) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomLngLat) {\n return this;\n }\n const { maxZoom, minZoom } = this.getViewportProps();\n let zoom = startZoom + Math.log2(scale);\n zoom = clamp(zoom, minZoom, maxZoom);\n const zoomedViewport = this.makeViewport({ ...this.getViewportProps(), zoom });\n return this._getUpdatedState({\n zoom,\n ...zoomedViewport.panByPosition(startZoomLngLat, pos)\n });\n }\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd() {\n return this._getUpdatedState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n zoomIn(speed = 2) {\n return this._zoomFromCenter(speed);\n }\n zoomOut(speed = 2) {\n return this._zoomFromCenter(1 / speed);\n }\n moveLeft(speed = 100) {\n return this._panFromCenter([speed, 0]);\n }\n moveRight(speed = 100) {\n return this._panFromCenter([-speed, 0]);\n }\n moveUp(speed = 100) {\n return this._panFromCenter([0, speed]);\n }\n moveDown(speed = 100) {\n return this._panFromCenter([0, -speed]);\n }\n rotateLeft(speed = 15) {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n rotateRight(speed = 15) {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n rotateUp(speed = 10) {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n rotateDown(speed = 10) {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n shortestPathFrom(viewState) {\n // const endViewStateProps = new this.ControllerState(endProps).shortestPathFrom(startViewstate);\n const fromProps = viewState.getViewportProps();\n const props = { ...this.getViewportProps() };\n const { bearing, longitude } = props;\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (Math.abs(longitude - fromProps.longitude) > 180) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props) {\n // Ensure zoom is within specified range\n const { maxZoom, minZoom, zoom } = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n // Ensure pitch is within specified range\n const { maxPitch, minPitch, pitch } = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n // Normalize viewport props to fit map height into viewport\n const { normalize = true } = props;\n if (normalize) {\n Object.assign(props, normalizeViewportProps(props));\n }\n return props;\n }\n /* Private methods */\n _zoomFromCenter(scale) {\n const { width, height } = this.getViewportProps();\n return this.zoom({\n pos: [width / 2, height / 2],\n scale\n });\n }\n _panFromCenter(offset) {\n const { width, height } = this.getViewportProps();\n return this.pan({\n startPos: [width / 2, height / 2],\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n _getUpdatedState(newProps) {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n _unproject(pos) {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n _getNewRotation(pos, startPos, startPitch, startBearing) {\n const deltaX = pos[0] - startPos[0];\n const deltaY = pos[1] - startPos[1];\n const centerY = pos[1];\n const startY = startPos[1];\n const { width, height } = this.getViewportProps();\n const deltaScaleX = deltaX / width;\n let deltaScaleY = 0;\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to -1 as we drag upwards\n deltaScaleY = (deltaY / (startY - height)) * PITCH_ACCEL;\n }\n }\n else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to 1 as we drag upwards\n deltaScaleY = 1 - centerY / startY;\n }\n }\n // clamp deltaScaleY to [-1, 1] so that rotation is constrained between minPitch and maxPitch.\n // deltaScaleX does not need to be clamped as bearing does not have constraints.\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n const { minPitch, maxPitch } = this.getViewportProps();\n const bearing = startBearing + 180 * deltaScaleX;\n let pitch = startPitch;\n if (deltaScaleY > 0) {\n // Gradually increase pitch\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n }\n else if (deltaScaleY < 0) {\n // Gradually decrease pitch\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n return {\n pitch,\n bearing\n };\n }\n}\nexport default class MapController extends Controller {\n constructor() {\n super(...arguments);\n this.ControllerState = MapState;\n this.transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch', 'position'],\n required: ['longitude', 'latitude', 'zoom']\n }\n })\n };\n this.dragMode = 'pan';\n }\n setProps(props) {\n props.position = props.position || [0, 0, 0];\n const oldProps = this.props;\n super.setProps(props);\n const dimensionChanged = !oldProps || oldProps.height !== props.height;\n if (dimensionChanged) {\n // Dimensions changed, normalize the props\n this.updateViewport(new this.ControllerState({\n makeViewport: this.makeViewport,\n ...props,\n ...this.state\n }));\n }\n }\n}\n","import { worldToLngLat } from \"./web-mercator-utils.js\";\nimport { mod, log2 } from \"./math-utils.js\";\n// defined by mapbox-gl\nconst TILE_SIZE = 512;\n/**\n * Apply mathematical constraints to viewport props\n * @param props\n */\n// eslint-disable-next-line complexity\nexport function normalizeViewportProps(props) {\n const { width, height, pitch = 0 } = props;\n let { longitude, latitude, zoom, bearing = 0 } = props;\n // Normalize degrees\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n // Constrain zoom and shift center at low zoom levels\n const minZoom = log2(height / TILE_SIZE);\n if (zoom <= minZoom) {\n zoom = minZoom;\n latitude = 0;\n }\n else {\n // Eliminate white space above and below the map\n const halfHeightPixels = height / 2 / Math.pow(2, zoom);\n const minLatitude = worldToLngLat([0, halfHeightPixels])[1];\n if (latitude < minLatitude) {\n latitude = minLatitude;\n }\n else {\n const maxLatitude = worldToLngLat([0, TILE_SIZE - halfHeightPixels])[1];\n if (latitude > maxLatitude) {\n latitude = maxLatitude;\n }\n }\n }\n return { width, height, longitude, latitude, zoom, pitch, bearing };\n}\n","import View from \"./view.js\";\nimport WebMercatorViewport from \"../viewports/web-mercator-viewport.js\";\nimport MapController from \"../controllers/map-controller.js\";\nexport default class MapView extends View {\n static { this.displayName = 'MapView'; }\n constructor(props = {}) {\n super(props);\n }\n get ViewportType() {\n return WebMercatorViewport;\n }\n get ControllerType() {\n return MapController;\n }\n}\n","const DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nlet idCount = 0;\nexport class AmbientLight {\n constructor(props = {}) {\n this.type = 'ambient';\n const { color = DEFAULT_LIGHT_COLOR } = props;\n const { intensity = DEFAULT_LIGHT_INTENSITY } = props;\n this.id = props.id || `ambient-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n }\n}\n","import { Vector3 } from '@math.gl/core';\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_LIGHT_DIRECTION = [0.0, 0.0, -1.0];\nlet idCount = 0;\nexport class DirectionalLight {\n constructor(props = {}) {\n this.type = 'directional';\n const { color = DEFAULT_LIGHT_COLOR } = props;\n const { intensity = DEFAULT_LIGHT_INTENSITY } = props;\n const { direction = DEFAULT_LIGHT_DIRECTION } = props;\n const { _shadow = false } = props;\n this.id = props.id || `directional-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'directional';\n this.direction = new Vector3(direction).normalize().toArray();\n this.shadow = _shadow;\n }\n getProjectedLight(opts) {\n return this;\n }\n}\n","/**\n * Base class for passes\n * @todo v9 - should the luma.gl RenderPass be owned by this class?\n * Currently owned by subclasses\n */\nexport default class Pass {\n /** Create a new Pass instance */\n constructor(device, props = { id: 'pass' }) {\n const { id } = props;\n this.id = id; // id of this pass\n this.device = device;\n this.props = { ...props };\n }\n setProps(props) {\n Object.assign(this.props, props);\n }\n render(params) { } // eslint-disable-line @typescript-eslint/no-empty-function\n cleanup() { } // eslint-disable-line @typescript-eslint/no-empty-function\n}\n","import Pass from \"./pass.js\";\n/** A Pass that renders all layers */\nexport default class LayersPass extends Pass {\n constructor() {\n super(...arguments);\n this._lastRenderIndex = -1;\n }\n render(options) {\n // @ts-expect-error TODO - assuming WebGL context\n const [width, height] = this.device.canvasContext.getDrawingBufferSize();\n // Explicitly specify clearColor and clearDepth, overriding render pass defaults.\n const clearCanvas = options.clearCanvas ?? true;\n const clearColor = options.clearColor ?? (clearCanvas ? [0, 0, 0, 0] : false);\n const clearDepth = clearCanvas ? 1 : false;\n const clearStencil = clearCanvas ? 0 : false;\n const colorMask = options.colorMask ?? 0xf;\n const parameters = { viewport: [0, 0, width, height] };\n if (options.colorMask) {\n parameters.colorMask = colorMask;\n }\n if (options.scissorRect) {\n parameters.scissorRect = options.scissorRect;\n }\n const renderPass = this.device.beginRenderPass({\n framebuffer: options.target,\n parameters,\n clearColor,\n clearDepth,\n clearStencil\n });\n try {\n return this._drawLayers(renderPass, options);\n }\n finally {\n renderPass.end();\n }\n }\n /** Draw a list of layers in a list of viewports */\n _drawLayers(renderPass, options) {\n const { target, moduleParameters, viewports, views, onViewportActive, clearStack = true } = options;\n options.pass = options.pass || 'unknown';\n if (clearStack) {\n this._lastRenderIndex = -1;\n }\n const renderStats = [];\n for (const viewport of viewports) {\n const view = views && views[viewport.id];\n // Update context to point to this viewport\n onViewportActive?.(viewport);\n const drawLayerParams = this._getDrawLayerParams(viewport, options);\n // render this viewport\n const subViewports = viewport.subViewports || [viewport];\n for (const subViewport of subViewports) {\n const stats = this._drawLayersInViewport(renderPass, {\n target,\n moduleParameters,\n viewport: subViewport,\n view,\n pass: options.pass,\n layers: options.layers\n }, drawLayerParams);\n renderStats.push(stats);\n }\n }\n return renderStats;\n }\n // When a viewport contains multiple subviewports (e.g. repeated web mercator map),\n // this is only done once for the parent viewport\n /* Resolve the parameters needed to draw each layer */\n _getDrawLayerParams(viewport, { layers, pass, isPicking = false, layerFilter, cullRect, effects, moduleParameters }, \n /** Internal flag, true if only used to determine whether each layer should be drawn */\n evaluateShouldDrawOnly = false) {\n const drawLayerParams = [];\n const indexResolver = layerIndexResolver(this._lastRenderIndex + 1);\n const drawContext = {\n layer: layers[0],\n viewport,\n isPicking,\n renderPass: pass,\n cullRect\n };\n const layerFilterCache = {};\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n // Check if we should draw layer\n const shouldDrawLayer = this._shouldDrawLayer(layer, drawContext, layerFilter, layerFilterCache);\n const layerParam = {\n shouldDrawLayer\n };\n if (shouldDrawLayer && !evaluateShouldDrawOnly) {\n // This is the \"logical\" index for ordering this layer in the stack\n // used to calculate polygon offsets\n // It can be the same as another layer\n layerParam.layerRenderIndex = indexResolver(layer, shouldDrawLayer);\n layerParam.moduleParameters = this._getModuleParameters(layer, effects, pass, moduleParameters);\n layerParam.layerParameters = {\n ...layer.context.deck?.props.parameters,\n ...this.getLayerParameters(layer, layerIndex, viewport)\n };\n }\n drawLayerParams[layerIndex] = layerParam;\n }\n return drawLayerParams;\n }\n // Draws a list of layers in one viewport\n // TODO - when picking we could completely skip rendering viewports that dont\n // intersect with the picking rect\n /* eslint-disable max-depth, max-statements */\n _drawLayersInViewport(renderPass, { layers, moduleParameters: globalModuleParameters, pass, target, viewport, view }, drawLayerParams) {\n const glViewport = getGLViewport(this.device, {\n moduleParameters: globalModuleParameters,\n target,\n viewport\n });\n // TODO v9 - remove WebGL specific logic\n if (view && view.props.clear) {\n const clearOpts = view.props.clear === true ? { color: true, depth: true } : view.props.clear;\n this.device.withParametersWebGL({\n scissorTest: true,\n scissor: glViewport\n }, () => this.device.clearWebGL(clearOpts));\n }\n // render layers in normal colors\n const renderStatus = {\n totalCount: layers.length,\n visibleCount: 0,\n compositeCount: 0,\n pickableCount: 0\n };\n renderPass.setParameters({ viewport: glViewport });\n // render layers in normal colors\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n const { shouldDrawLayer, layerRenderIndex, moduleParameters, layerParameters } = drawLayerParams[layerIndex];\n // Calculate stats\n if (shouldDrawLayer && layer.props.pickable) {\n renderStatus.pickableCount++;\n }\n if (layer.isComposite) {\n renderStatus.compositeCount++;\n }\n else if (shouldDrawLayer) {\n // Draw the layer\n renderStatus.visibleCount++;\n this._lastRenderIndex = Math.max(this._lastRenderIndex, layerRenderIndex);\n // overwrite layer.context.viewport with the sub viewport\n moduleParameters.viewport = viewport;\n // TODO v9 - we are sending renderPass both as a parameter and through the context.\n // Long-term, it is likely better not to have user defined layer methods have to access\n // the \"global\" layer context.\n layer.context.renderPass = renderPass;\n try {\n layer._drawLayer({\n renderPass,\n moduleParameters,\n uniforms: { layerIndex: layerRenderIndex },\n parameters: layerParameters\n });\n }\n catch (err) {\n layer.raiseError(err, `drawing ${layer} to ${pass}`);\n }\n }\n }\n return renderStatus;\n }\n /* eslint-enable max-depth, max-statements */\n /* Methods for subclass overrides */\n shouldDrawLayer(layer) {\n return true;\n }\n getModuleParameters(layer, effects) {\n return null;\n }\n getLayerParameters(layer, layerIndex, viewport) {\n return layer.props.parameters;\n }\n /* Private */\n _shouldDrawLayer(layer, drawContext, layerFilter, layerFilterCache) {\n const shouldDrawLayer = layer.props.visible && this.shouldDrawLayer(layer);\n if (!shouldDrawLayer) {\n return false;\n }\n drawContext.layer = layer;\n let parent = layer.parent;\n while (parent) {\n // @ts-ignore\n if (!parent.props.visible || !parent.filterSubLayer(drawContext)) {\n return false;\n }\n drawContext.layer = parent;\n parent = parent.parent;\n }\n if (layerFilter) {\n const rootLayerId = drawContext.layer.id;\n if (!(rootLayerId in layerFilterCache)) {\n layerFilterCache[rootLayerId] = layerFilter(drawContext);\n }\n if (!layerFilterCache[rootLayerId]) {\n return false;\n }\n }\n // If a layer is drawn, update its viewportChanged flag\n layer.activateViewport(drawContext.viewport);\n return true;\n }\n _getModuleParameters(layer, effects, pass, overrides) {\n // @ts-expect-error TODO - assuming WebGL context\n const devicePixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const moduleParameters = Object.assign(Object.create(layer.internalState?.propsInTransition || layer.props), {\n autoWrapLongitude: layer.wrapLongitude,\n viewport: layer.context.viewport,\n mousePosition: layer.context.mousePosition,\n picking: {\n isActive: 0\n },\n devicePixelRatio\n });\n if (effects) {\n for (const effect of effects) {\n Object.assign(moduleParameters, effect.getModuleParameters?.(layer));\n }\n }\n return Object.assign(moduleParameters, this.getModuleParameters(layer, effects), overrides);\n }\n}\n// If the _index prop is defined, return a layer index that's relative to its parent\n// Otherwise return the index of the layer among all rendered layers\n// This is done recursively, i.e. if the user overrides a layer's default index,\n// all its descendants will be resolved relative to that index.\n// This implementation assumes that parent layers always appear before its children\n// which is true if the layer array comes from the LayerManager\nexport function layerIndexResolver(startIndex = 0, layerIndices = {}) {\n const resolvers = {};\n const resolveLayerIndex = (layer, isDrawn) => {\n const indexOverride = layer.props._offset;\n const layerId = layer.id;\n const parentId = layer.parent && layer.parent.id;\n let index;\n if (parentId && !(parentId in layerIndices)) {\n // Populate layerIndices with the parent layer's index\n resolveLayerIndex(layer.parent, false);\n }\n if (parentId in resolvers) {\n const resolver = (resolvers[parentId] =\n resolvers[parentId] || layerIndexResolver(layerIndices[parentId], layerIndices));\n index = resolver(layer, isDrawn);\n resolvers[layerId] = resolver;\n }\n else if (Number.isFinite(indexOverride)) {\n index = indexOverride + (layerIndices[parentId] || 0);\n // Mark layer as needing its own resolver\n // We don't actually create it until it's used for the first time\n resolvers[layerId] = null;\n }\n else {\n index = startIndex;\n }\n if (isDrawn && index >= startIndex) {\n startIndex = index + 1;\n }\n layerIndices[layerId] = index;\n return index;\n };\n return resolveLayerIndex;\n}\n// Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\nfunction getGLViewport(device, { moduleParameters, target, viewport }) {\n const pixelRatio = (moduleParameters && moduleParameters.devicePixelRatio) ||\n // @ts-expect-error TODO - assuming WebGL context\n device.canvasContext.cssToDeviceRatio();\n // Default framebuffer is used when writing to canvas\n // @ts-expect-error TODO - assuming WebGL context\n const [, drawingBufferHeight] = device.canvasContext.getDrawingBufferSize();\n const height = target ? target.height : drawingBufferHeight;\n // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\n const dimensions = viewport;\n return [\n dimensions.x * pixelRatio,\n height - (dimensions.y + dimensions.height) * pixelRatio,\n dimensions.width * pixelRatio,\n dimensions.height * pixelRatio\n ];\n}\n","import LayersPass from \"./layers-pass.js\";\nexport default class ShadowPass extends LayersPass {\n constructor(device, props) {\n super(device, props);\n // The shadowMap texture\n this.shadowMap = device.createTexture({\n width: 1,\n height: 1,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n });\n // @ts-ignore\n this.depthBuffer = device.createTexture({\n format: 'depth16unorm',\n width: 1,\n height: 1,\n mipmaps: false,\n // TODO fix getWebGLTextureParameters() in luma to avoid passing deprecated parameters\n dataFormat: 6402, // gl.DEPTH_COMPONENT\n type: 5125 // gl.UNSIGNED_INT\n });\n this.fbo = device.createFramebuffer({\n id: 'shadowmap',\n width: 1,\n height: 1,\n colorAttachments: [this.shadowMap],\n // Depth attachment has to be specified for depth test to work\n depthStencilAttachment: this.depthBuffer\n });\n }\n render(params) {\n const target = this.fbo;\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const viewport = params.viewports[0];\n const width = viewport.width * pixelRatio;\n const height = viewport.height * pixelRatio;\n const clearColor = [1, 1, 1, 1];\n if (width !== target.width || height !== target.height) {\n target.resize({ width, height });\n }\n super.render({ ...params, clearColor, target, pass: 'shadow' });\n }\n getLayerParameters(layer, layerIndex, viewport) {\n return { ...layer.props.parameters, blend: false, depthRange: [0, 1], depthTest: true };\n }\n shouldDrawLayer(layer) {\n return layer.props.shadowEnabled !== false;\n }\n getModuleParameters() {\n return {\n drawToShadowMap: true\n };\n }\n delete() {\n if (this.fbo) {\n this.fbo.destroy();\n this.fbo = null;\n }\n if (this.shadowMap) {\n this.shadowMap.destroy();\n this.shadowMap = null;\n }\n if (this.depthBuffer) {\n this.depthBuffer.destroy();\n this.depthBuffer = null;\n }\n }\n}\n","// Copyright (c) 2015-2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { COORDINATE_SYSTEM, PROJECTION_MODE } from \"../../lib/constants.js\";\nimport project from \"../project/project.js\";\nimport { Vector3, Matrix4 } from '@math.gl/core';\nimport memoize from \"../../utils/memoize.js\";\nimport { pixelsToWorld } from '@math.gl/web-mercator';\nconst vs = `\nconst int max_lights = 2;\nuniform mat4 shadow_uViewProjectionMatrices[max_lights];\nuniform vec4 shadow_uProjectCenters[max_lights];\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform int shadow_uLightId;\nuniform float shadow_uLightCount;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n if (shadow_uDrawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[shadow_uLightId], shadow_uProjectCenters[shadow_uLightId]);\n }\n if (shadow_uUseShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow_uLightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[i], shadow_uProjectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n`;\nconst fs = `\nconst int max_lights = 2;\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\nuniform vec4 shadow_uColor;\nuniform float shadow_uLightCount;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow_uDrawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow_uUseShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow_uLightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow_uColor.a / shadow_uLightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow_uColor.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n`;\nconst getMemoizedViewportCenterPosition = memoize(getViewportCenterPosition);\nconst getMemoizedViewProjectionMatrices = memoize(getViewProjectionMatrices);\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 1.0];\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nfunction screenToCommonSpace(xyz, pixelUnprojectionMatrix) {\n const [x, y, z] = xyz;\n const coord = pixelsToWorld([x, y, z], pixelUnprojectionMatrix);\n if (Number.isFinite(z)) {\n return coord;\n }\n return [coord[0], coord[1], 0];\n}\nfunction getViewportCenterPosition({ viewport, center }) {\n return new Matrix4(viewport.viewProjectionMatrix).invert().transform(center);\n}\nfunction getViewProjectionMatrices({ viewport, shadowMatrices }) {\n const projectionMatrices = [];\n const pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n const farZ = viewport.isGeospatial ? undefined : 1;\n const corners = [\n [0, 0, farZ], // top left ground\n [viewport.width, 0, farZ], // top right ground\n [0, viewport.height, farZ], // bottom left ground\n [viewport.width, viewport.height, farZ], // bottom right ground\n [0, 0, -1], // top left near\n [viewport.width, 0, -1], // top right near\n [0, viewport.height, -1], // bottom left near\n [viewport.width, viewport.height, -1] // bottom right near\n ].map(pixel => \n // @ts-expect-error z may be undefined\n screenToCommonSpace(pixel, pixelUnprojectionMatrix));\n for (const shadowMatrix of shadowMatrices) {\n const viewMatrix = shadowMatrix.clone().translate(new Vector3(viewport.center).negate());\n const positions = corners.map(corner => viewMatrix.transform(corner));\n const projectionMatrix = new Matrix4().ortho({\n left: Math.min(...positions.map(position => position[0])),\n right: Math.max(...positions.map(position => position[0])),\n bottom: Math.min(...positions.map(position => position[1])),\n top: Math.max(...positions.map(position => position[1])),\n near: Math.min(...positions.map(position => -position[2])),\n far: Math.max(...positions.map(position => -position[2]))\n });\n projectionMatrices.push(projectionMatrix.multiplyRight(shadowMatrix));\n }\n return projectionMatrices;\n}\n/* eslint-disable camelcase */\n// eslint-disable-next-line complexity\nfunction createShadowUniforms(opts, context) {\n const { shadowEnabled = true } = opts;\n if (!shadowEnabled || !opts.shadowMatrices || !opts.shadowMatrices.length) {\n return {\n shadow_uDrawShadowMap: false,\n shadow_uUseShadowMap: false,\n shadow_uShadowMap0: opts.dummyShadowMap,\n shadow_uShadowMap1: opts.dummyShadowMap\n };\n }\n const uniforms = {\n shadow_uDrawShadowMap: Boolean(opts.drawToShadowMap),\n shadow_uUseShadowMap: opts.shadowMaps ? opts.shadowMaps.length > 0 : false,\n shadow_uColor: opts.shadowColor || DEFAULT_SHADOW_COLOR,\n shadow_uLightId: opts.shadowLightId || 0,\n shadow_uLightCount: opts.shadowMatrices.length\n };\n const center = getMemoizedViewportCenterPosition({\n viewport: opts.viewport,\n center: context.project_uCenter\n });\n const projectCenters = [];\n const viewProjectionMatrices = getMemoizedViewProjectionMatrices({\n shadowMatrices: opts.shadowMatrices,\n viewport: opts.viewport\n }).slice();\n for (let i = 0; i < opts.shadowMatrices.length; i++) {\n const viewProjectionMatrix = viewProjectionMatrices[i];\n const viewProjectionMatrixCentered = viewProjectionMatrix\n .clone()\n .translate(new Vector3(opts.viewport.center).negate());\n if (context.project_uCoordinateSystem === COORDINATE_SYSTEM.LNGLAT &&\n context.project_uProjectionMode === PROJECTION_MODE.WEB_MERCATOR) {\n viewProjectionMatrices[i] = viewProjectionMatrixCentered;\n projectCenters[i] = center;\n }\n else {\n viewProjectionMatrices[i] = viewProjectionMatrix\n .clone()\n .multiplyRight(VECTOR_TO_POINT_MATRIX);\n projectCenters[i] = viewProjectionMatrixCentered.transform(center);\n }\n }\n for (let i = 0; i < viewProjectionMatrices.length; i++) {\n uniforms[`shadow_uViewProjectionMatrices[${i}]`] = viewProjectionMatrices[i];\n uniforms[`shadow_uProjectCenters[${i}]`] = projectCenters[i];\n }\n for (let i = 0; i < 2; i++) {\n uniforms[`shadow_uShadowMap${i}`] =\n (opts.shadowMaps && opts.shadowMaps[i]) || opts.dummyShadowMap;\n }\n return uniforms;\n}\nexport default {\n name: 'shadow',\n dependencies: [project],\n vs,\n fs,\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n position = shadow_setVertexPosition(geometry.position);\n `,\n 'fs:DECKGL_FILTER_COLOR': `\n color = shadow_filterShadowColor(color);\n `\n },\n getUniforms: (opts = {}, context = {}) => {\n if ('viewport' in opts &&\n (opts.drawToShadowMap || (opts.shadowMaps && opts.shadowMaps.length > 0))) {\n // @ts-expect-error if opts.viewport is defined, context should contain the project module's uniforms\n return createShadowUniforms(opts, context);\n }\n return {};\n }\n};\n","import { AmbientLight } from \"./ambient-light.js\";\nimport { DirectionalLight } from \"./directional-light.js\";\nimport { Matrix4, Vector3 } from '@math.gl/core';\nimport ShadowPass from \"../../passes/shadow-pass.js\";\nimport shadow from \"../../shaderlib/shadow/shadow.js\";\nconst DEFAULT_AMBIENT_LIGHT_PROPS = { color: [255, 255, 255], intensity: 1.0 };\nconst DEFAULT_DIRECTIONAL_LIGHT_PROPS = [\n {\n color: [255, 255, 255],\n intensity: 1.0,\n direction: [-1, 3, -1]\n },\n {\n color: [255, 255, 255],\n intensity: 0.9,\n direction: [1, -8, -2.5]\n }\n];\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 200 / 255];\n// Class to manage ambient, point and directional light sources in deck\nexport default class LightingEffect {\n constructor(props = {}) {\n this.id = 'lighting-effect';\n this.shadowColor = DEFAULT_SHADOW_COLOR;\n this.shadow = false;\n this.ambientLight = null;\n this.directionalLights = [];\n this.pointLights = [];\n this.shadowPasses = [];\n this.shadowMaps = [];\n this.dummyShadowMap = null;\n this.setProps(props);\n }\n setup(context) {\n this.context = context;\n const { device, deck } = context;\n if (this.shadow && !this.dummyShadowMap) {\n this._createShadowPasses(device);\n deck._addDefaultShaderModule(shadow);\n this.dummyShadowMap = device.createTexture({\n width: 1,\n height: 1\n });\n }\n }\n setProps(props) {\n this.ambientLight = null;\n this.directionalLights = [];\n this.pointLights = [];\n for (const key in props) {\n const lightSource = props[key];\n switch (lightSource.type) {\n case 'ambient':\n this.ambientLight = lightSource;\n break;\n case 'directional':\n this.directionalLights.push(lightSource);\n break;\n case 'point':\n this.pointLights.push(lightSource);\n break;\n default:\n }\n }\n this._applyDefaultLights();\n this.shadow = this.directionalLights.some(light => light.shadow);\n if (this.context) {\n // Create resources if necessary\n this.setup(this.context);\n }\n this.props = props;\n }\n preRender({ layers, layerFilter, viewports, onViewportActive, views }) {\n if (!this.shadow)\n return;\n // create light matrix every frame to make sure always updated from light source\n this.shadowMatrices = this._calculateMatrices();\n for (let i = 0; i < this.shadowPasses.length; i++) {\n const shadowPass = this.shadowPasses[i];\n shadowPass.render({\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n moduleParameters: {\n shadowLightId: i,\n dummyShadowMap: this.dummyShadowMap,\n shadowMatrices: this.shadowMatrices\n }\n });\n }\n }\n getModuleParameters(layer) {\n const parameters = this.shadow\n ? {\n shadowMaps: this.shadowMaps,\n dummyShadowMap: this.dummyShadowMap,\n shadowColor: this.shadowColor,\n shadowMatrices: this.shadowMatrices\n }\n : {};\n // when not rendering to screen, turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n parameters.lightSources = {\n ambientLight: this.ambientLight,\n directionalLights: this.directionalLights.map(directionalLight => directionalLight.getProjectedLight({ layer })),\n pointLights: this.pointLights.map(pointLight => pointLight.getProjectedLight({ layer }))\n };\n return parameters;\n }\n cleanup(context) {\n for (const shadowPass of this.shadowPasses) {\n shadowPass.delete();\n }\n this.shadowPasses.length = 0;\n this.shadowMaps.length = 0;\n if (this.dummyShadowMap) {\n this.dummyShadowMap.destroy();\n this.dummyShadowMap = null;\n context.deck._removeDefaultShaderModule(shadow);\n }\n }\n _calculateMatrices() {\n const lightMatrices = [];\n for (const light of this.directionalLights) {\n const viewMatrix = new Matrix4().lookAt({\n eye: new Vector3(light.direction).negate()\n });\n lightMatrices.push(viewMatrix);\n }\n return lightMatrices;\n }\n _createShadowPasses(device) {\n for (let i = 0; i < this.directionalLights.length; i++) {\n const shadowPass = new ShadowPass(device);\n this.shadowPasses[i] = shadowPass;\n this.shadowMaps[i] = shadowPass.shadowMap;\n }\n }\n _applyDefaultLights() {\n const { ambientLight, pointLights, directionalLights } = this;\n if (!ambientLight && pointLights.length === 0 && directionalLights.length === 0) {\n this.ambientLight = new AmbientLight(DEFAULT_AMBIENT_LIGHT_PROPS);\n this.directionalLights.push(new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[0]), new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[1]));\n }\n }\n}\n","import { deepEqual } from \"../utils/deep-equal.js\";\nimport LightingEffect from \"../effects/lighting/lighting-effect.js\";\nconst DEFAULT_LIGHTING_EFFECT = new LightingEffect();\n/** Sort two effects. Returns 0 if equal, negative if e1 < e2, positive if e1 > e2 */\nfunction compareEffects(e1, e2) {\n const o1 = e1.order ?? Infinity;\n const o2 = e2.order ?? Infinity;\n return o1 - o2;\n}\nexport default class EffectManager {\n constructor(context) {\n this._resolvedEffects = [];\n /** Effect instances and order preference pairs, sorted by order */\n this._defaultEffects = [];\n this.effects = [];\n this._context = context;\n this._needsRedraw = 'Initial render';\n this._setEffects([]);\n }\n /**\n * Register a new default effect, i.e. an effect presents regardless of user supplied props.effects\n */\n addDefaultEffect(effect) {\n const defaultEffects = this._defaultEffects;\n if (!defaultEffects.find(e => e.id === effect.id)) {\n const index = defaultEffects.findIndex(e => compareEffects(e, effect) > 0);\n if (index < 0) {\n defaultEffects.push(effect);\n }\n else {\n defaultEffects.splice(index, 0, effect);\n }\n effect.setup(this._context);\n this._setEffects(this.effects);\n }\n }\n setProps(props) {\n if ('effects' in props) {\n // Compare effects against each other shallowly\n if (!deepEqual(props.effects, this.effects, 1)) {\n this._setEffects(props.effects);\n }\n }\n }\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n getEffects() {\n return this._resolvedEffects;\n }\n _setEffects(effects) {\n const oldEffectsMap = {};\n for (const effect of this.effects) {\n oldEffectsMap[effect.id] = effect;\n }\n const nextEffects = [];\n for (const effect of effects) {\n const oldEffect = oldEffectsMap[effect.id];\n let effectToAdd = effect;\n if (oldEffect && oldEffect !== effect) {\n if (oldEffect.setProps) {\n oldEffect.setProps(effect.props);\n effectToAdd = oldEffect;\n }\n else {\n oldEffect.cleanup(this._context);\n }\n }\n else if (!oldEffect) {\n effect.setup(this._context);\n }\n nextEffects.push(effectToAdd);\n delete oldEffectsMap[effect.id];\n }\n for (const removedEffectId in oldEffectsMap) {\n oldEffectsMap[removedEffectId].cleanup(this._context);\n }\n this.effects = nextEffects;\n this._resolvedEffects = nextEffects.concat(this._defaultEffects);\n // Special case for lighting: only add default instance if no LightingEffect is specified\n if (!effects.some(effect => effect instanceof LightingEffect)) {\n this._resolvedEffects.push(DEFAULT_LIGHTING_EFFECT);\n }\n this._needsRedraw = 'effects changed';\n }\n finalize() {\n for (const effect of this._resolvedEffects) {\n effect.cleanup(this._context);\n }\n this.effects.length = 0;\n this._resolvedEffects.length = 0;\n this._defaultEffects.length = 0;\n }\n}\n","import LayersPass from \"./layers-pass.js\";\nexport default class DrawLayersPass extends LayersPass {\n shouldDrawLayer(layer) {\n const { operation } = layer.props;\n return operation.includes('draw') || operation.includes('terrain');\n }\n}\n","import LayersPass from \"./layers-pass.js\";\nimport log from \"../utils/log.js\";\nconst PICKING_BLENDING = {\n blendColorOperation: 'add',\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'zero',\n blendAlphaOperation: 'add',\n blendAlphaSrcFactor: 'constant-alpha',\n blendAlphaDstFactor: 'zero'\n};\nexport default class PickLayersPass extends LayersPass {\n constructor() {\n super(...arguments);\n this._colorEncoderState = null;\n }\n render(props) {\n if ('pickingFBO' in props) {\n // When drawing into an off-screen buffer, use the alpha channel to encode layer index\n return this._drawPickingBuffer(props);\n }\n // When drawing to screen (debug mode), do not use the alpha channel so that result is always visible\n return super.render(props);\n }\n // Private\n // Draws list of layers and viewports into the picking buffer\n // Note: does not sample the buffer, that has to be done by the caller\n _drawPickingBuffer({ layers, layerFilter, views, viewports, onViewportActive, pickingFBO, deviceRect: { x, y, width, height }, cullRect, effects, pass = 'picking', pickZ, moduleParameters }) {\n this.pickZ = pickZ;\n const colorEncoderState = this._resetColorEncoder(pickZ);\n const scissorRect = [x, y, width, height];\n // Make sure we clear scissor test and fbo bindings in case of exceptions\n // We are only interested in one pixel, no need to render anything else\n // Note that the callback here is called synchronously.\n // Set blend mode for picking\n // always overwrite existing pixel with [r,g,b,layerIndex]\n const renderStatus = super.render({\n target: pickingFBO,\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n cullRect,\n effects: effects?.filter(e => e.useInPicking),\n pass,\n isPicking: true,\n moduleParameters,\n clearColor: [0, 0, 0, 0],\n colorMask: 0xf,\n scissorRect\n });\n // Clear the temp field\n this._colorEncoderState = null;\n const decodePickingColor = colorEncoderState && decodeColor.bind(null, colorEncoderState);\n return { decodePickingColor, stats: renderStatus };\n }\n shouldDrawLayer(layer) {\n const { pickable, operation } = layer.props;\n return ((pickable && operation.includes('draw')) ||\n operation.includes('terrain') ||\n operation.includes('mask'));\n }\n getModuleParameters() {\n return {\n picking: {\n isActive: 1,\n isAttribute: this.pickZ\n },\n // turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n lightSources: {}\n };\n }\n getLayerParameters(layer, layerIndex, viewport) {\n const pickParameters = {\n // TODO - When used as a custom layer in older Mapbox versions, context\n // state was dirty. Mapbox fixed that; we should test and remove the workaround.\n // https://github.com/mapbox/mapbox-gl-js/issues/7801\n depthMask: true,\n depthTest: true,\n depthRange: [0, 1],\n ...layer.props.parameters\n };\n const { pickable, operation } = layer.props;\n if (!this._colorEncoderState || operation.includes('terrain')) {\n pickParameters.blend = false;\n }\n else if (pickable && operation.includes('draw')) {\n Object.assign(pickParameters, PICKING_BLENDING);\n pickParameters.blend = true;\n pickParameters.blendColor = encodeColor(this._colorEncoderState, layer, viewport);\n }\n return pickParameters;\n }\n _resetColorEncoder(pickZ) {\n // Track encoded layer indices\n this._colorEncoderState = pickZ\n ? null\n : {\n byLayer: new Map(),\n byAlpha: []\n };\n // Temporarily store it on the instance so that it can be accessed by this.getLayerParameters\n return this._colorEncoderState;\n }\n}\n// Assign an unique alpha value for each pickable layer and track the encoding in the cache object\n// Returns normalized blend color\nfunction encodeColor(encoded, layer, viewport) {\n const { byLayer, byAlpha } = encoded;\n let a;\n // Encode layerIndex in the alpha channel\n // TODO - combine small layers to better utilize the picking color space\n let entry = byLayer.get(layer);\n if (entry) {\n entry.viewports.push(viewport);\n a = entry.a;\n }\n else {\n a = byLayer.size + 1;\n if (a <= 255) {\n entry = { a, layer, viewports: [viewport] };\n byLayer.set(layer, entry);\n byAlpha[a] = entry;\n }\n else {\n log.warn('Too many pickable layers, only picking the first 255')();\n a = 0;\n }\n }\n return [0, 0, 0, a / 255];\n}\n// Given a picked color, retrieve the corresponding layer and viewports from cache\nfunction decodeColor(encoded, pickedColor) {\n const entry = encoded.byAlpha[pickedColor[3]];\n return (entry && {\n pickedLayer: entry.layer,\n pickedViewports: entry.viewports,\n pickedObjectIndex: entry.layer.decodePickingColor(pickedColor)\n });\n}\n","import debug from \"../debug/index.js\";\nimport DrawLayersPass from \"../passes/draw-layers-pass.js\";\nimport PickLayersPass from \"../passes/pick-layers-pass.js\";\nconst TRACE_RENDER_LAYERS = 'deckRenderer.renderLayers';\nexport default class DeckRenderer {\n constructor(device) {\n this.device = device;\n // @ts-expect-error\n this.gl = device.gl;\n this.layerFilter = null;\n this.drawPickingColors = false;\n this.drawLayersPass = new DrawLayersPass(device);\n this.pickLayersPass = new PickLayersPass(device);\n this.renderCount = 0;\n this._needsRedraw = 'Initial render';\n this.renderBuffers = [];\n this.lastPostProcessEffect = null;\n }\n setProps(props) {\n if (this.layerFilter !== props.layerFilter) {\n this.layerFilter = props.layerFilter;\n this._needsRedraw = 'layerFilter changed';\n }\n if (this.drawPickingColors !== props.drawPickingColors) {\n this.drawPickingColors = props.drawPickingColors;\n this._needsRedraw = 'drawPickingColors changed';\n }\n }\n renderLayers(opts) {\n if (!opts.viewports.length) {\n return;\n }\n const layerPass = this.drawPickingColors ? this.pickLayersPass : this.drawLayersPass;\n const renderOpts = {\n layerFilter: this.layerFilter,\n isPicking: this.drawPickingColors,\n ...opts\n };\n if (renderOpts.effects) {\n this._preRender(renderOpts.effects, renderOpts);\n }\n const outputBuffer = this.lastPostProcessEffect ? this.renderBuffers[0] : renderOpts.target;\n if (this.lastPostProcessEffect) {\n renderOpts.clearColor = [0, 0, 0, 0];\n renderOpts.clearCanvas = true;\n }\n const renderStats = layerPass.render({ ...renderOpts, target: outputBuffer });\n if (renderOpts.effects) {\n this._postRender(renderOpts.effects, renderOpts);\n }\n this.renderCount++;\n debug(TRACE_RENDER_LAYERS, this, renderStats, opts);\n }\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n finalize() {\n const { renderBuffers } = this;\n for (const buffer of renderBuffers) {\n buffer.delete();\n }\n renderBuffers.length = 0;\n }\n _preRender(effects, opts) {\n this.lastPostProcessEffect = null;\n opts.preRenderStats = opts.preRenderStats || {};\n for (const effect of effects) {\n opts.preRenderStats[effect.id] = effect.preRender(opts);\n if (effect.postRender) {\n this.lastPostProcessEffect = effect.id;\n }\n }\n if (this.lastPostProcessEffect) {\n this._resizeRenderBuffers();\n }\n }\n _resizeRenderBuffers() {\n const { renderBuffers } = this;\n const size = this.device.canvasContext.getDrawingBufferSize();\n if (renderBuffers.length === 0) {\n [0, 1].map(i => {\n const texture = this.device.createTexture({\n sampler: { minFilter: 'linear', magFilter: 'linear' }\n });\n renderBuffers.push(this.device.createFramebuffer({\n id: `deck-renderbuffer-${i}`,\n colorAttachments: [texture]\n }));\n });\n }\n for (const buffer of renderBuffers) {\n buffer.resize(size);\n }\n }\n _postRender(effects, opts) {\n const { renderBuffers } = this;\n const params = {\n ...opts,\n inputBuffer: renderBuffers[0],\n swapBuffer: renderBuffers[1]\n };\n for (const effect of effects) {\n if (effect.postRender) {\n // If not the last post processing effect, unset the target so that\n // it only renders between the swap buffers\n params.target = effect.id === this.lastPostProcessEffect ? opts.target : undefined;\n const buffer = effect.postRender(params);\n // Buffer cannot be null if target is unset\n params.inputBuffer = buffer;\n params.swapBuffer = buffer === renderBuffers[0] ? renderBuffers[1] : renderBuffers[0];\n }\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport log from \"../../utils/log.js\";\nconst NO_PICKED_OBJECT = {\n pickedColor: null,\n pickedObjectIndex: -1\n};\n/* eslint-disable max-depth, max-statements */\n/**\n * Pick at a specified pixel with a tolerance radius\n * Returns the closest object to the pixel in shape `{pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getClosestObject({ pickedColors, decodePickingColor, deviceX, deviceY, deviceRadius, deviceRect }) {\n // Traverse all pixels in picking results and find the one closest to the supplied\n // [deviceX, deviceY]\n const { x, y, width, height } = deviceRect;\n let minSquareDistanceToCenter = deviceRadius * deviceRadius;\n let closestPixelIndex = -1;\n let i = 0;\n for (let row = 0; row < height; row++) {\n const dy = row + y - deviceY;\n const dy2 = dy * dy;\n if (dy2 > minSquareDistanceToCenter) {\n // skip this row\n i += 4 * width;\n }\n else {\n for (let col = 0; col < width; col++) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n if (pickedLayerIndex >= 0) {\n const dx = col + x - deviceX;\n const d2 = dx * dx + dy2;\n if (d2 <= minSquareDistanceToCenter) {\n minSquareDistanceToCenter = d2;\n closestPixelIndex = i;\n }\n }\n i += 4;\n }\n }\n }\n if (closestPixelIndex >= 0) {\n // Decode picked object index from color\n const pickedColor = pickedColors.slice(closestPixelIndex, closestPixelIndex + 4);\n const pickedObject = decodePickingColor(pickedColor);\n if (pickedObject) {\n const dy = Math.floor(closestPixelIndex / 4 / width);\n const dx = closestPixelIndex / 4 - dy * width;\n return {\n ...pickedObject,\n pickedColor,\n pickedX: x + dx,\n pickedY: y + dy\n };\n }\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n return NO_PICKED_OBJECT;\n}\n/**\n * Examines a picking buffer for unique colors\n * Returns array of unique objects in shape `{x, y, pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getUniqueObjects({ pickedColors, decodePickingColor }) {\n const uniqueColors = new Map();\n // Traverse all pixels in picking results and get unique colors\n if (pickedColors) {\n for (let i = 0; i < pickedColors.length; i += 4) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n if (pickedLayerIndex >= 0) {\n const pickedColor = pickedColors.slice(i, i + 4);\n const colorKey = pickedColor.join(',');\n // eslint-disable-next-line\n if (!uniqueColors.has(colorKey)) {\n const pickedObject = decodePickingColor(pickedColor);\n // eslint-disable-next-line\n if (pickedObject) {\n uniqueColors.set(colorKey, {\n ...pickedObject,\n color: pickedColor\n });\n }\n else {\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n }\n }\n }\n }\n return Array.from(uniqueColors.values());\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/** Generates some basic information of the picking action: x, y, coordinates etc.\n * Regardless if anything is picked\n */\nexport function getEmptyPickingInfo({ pickInfo, viewports, pixelRatio, x, y, z }) {\n // If more than one viewports are used in the picking pass, locate the viewport that\n // drew the picked pixel\n let pickedViewport = viewports[0];\n if (viewports.length > 1) {\n // Find the viewport that contain the picked pixel\n pickedViewport = getViewportFromCoordinates(pickInfo?.pickedViewports || viewports, { x, y });\n }\n let coordinate;\n if (pickedViewport) {\n const point = [x - pickedViewport.x, y - pickedViewport.y];\n if (z !== undefined) {\n point[2] = z;\n }\n coordinate = pickedViewport.unproject(point);\n }\n return {\n color: null,\n layer: null,\n viewport: pickedViewport,\n index: -1,\n picked: false,\n x,\n y,\n pixel: [x, y],\n coordinate,\n devicePixel: pickInfo && 'pickedX' in pickInfo\n ? [pickInfo.pickedX, pickInfo.pickedY]\n : undefined,\n pixelRatio\n };\n}\n/* eslint-disable max-depth */\n/** Generates the picking info of a picking operation */\nexport function processPickInfo(opts) {\n const { pickInfo, lastPickedInfo, mode, layers } = opts;\n const { pickedColor, pickedLayer, pickedObjectIndex } = pickInfo;\n const affectedLayers = pickedLayer ? [pickedLayer] : [];\n if (mode === 'hover') {\n // only invoke onHover events if picked object has changed\n const lastPickedPixelIndex = lastPickedInfo.index;\n const lastPickedLayerId = lastPickedInfo.layerId;\n const pickedLayerId = pickedLayer ? pickedLayer.props.id : null;\n // proceed only if picked object changed\n if (pickedLayerId !== lastPickedLayerId || pickedObjectIndex !== lastPickedPixelIndex) {\n if (pickedLayerId !== lastPickedLayerId) {\n // We cannot store a ref to lastPickedLayer in the context because\n // the state of an outdated layer is no longer valid\n // and the props may have changed\n const lastPickedLayer = layers.find(layer => layer.props.id === lastPickedLayerId);\n if (lastPickedLayer) {\n // Let leave event fire before enter event\n affectedLayers.unshift(lastPickedLayer);\n }\n }\n // Update layer manager context\n lastPickedInfo.layerId = pickedLayerId;\n lastPickedInfo.index = pickedObjectIndex;\n lastPickedInfo.info = null;\n }\n }\n const baseInfo = getEmptyPickingInfo(opts);\n // Use a Map to store all picking infos.\n // The following two forEach loops are the result of\n // https://github.com/visgl/deck.gl/issues/443\n // Please be very careful when changing this pattern\n const infos = new Map();\n // Make sure infos always contain something even if no layer is affected\n infos.set(null, baseInfo);\n affectedLayers.forEach(layer => {\n let info = { ...baseInfo };\n if (layer === pickedLayer) {\n info.color = pickedColor;\n info.index = pickedObjectIndex;\n info.picked = true;\n }\n info = getLayerPickingInfo({ layer, info, mode });\n const rootLayer = info.layer;\n if (layer === pickedLayer && mode === 'hover') {\n lastPickedInfo.info = info;\n }\n // This guarantees that there will be only one copy of info for\n // one composite layer\n infos.set(rootLayer.id, info);\n if (mode === 'hover') {\n rootLayer.updateAutoHighlight(info);\n }\n });\n return infos;\n}\n/** Walk up the layer composite chain to populate the info object */\nexport function getLayerPickingInfo({ layer, info, mode }) {\n while (layer && info) {\n // For a composite layer, sourceLayer will point to the sublayer\n // where the event originates from.\n // It provides additional context for the composite layer's\n // getPickingInfo() method to populate the info object\n const sourceLayer = info.layer || null;\n info.sourceLayer = sourceLayer;\n info.layer = layer;\n // layer.pickLayer() function requires a non-null ```layer.state```\n // object to function properly. So the layer referenced here\n // must be the \"current\" layer, not an \"out-dated\" / \"invalidated\" layer\n info = layer.getPickingInfo({ info, mode, sourceLayer });\n layer = layer.parent;\n }\n return info;\n}\n/** Indentifies which viewport, if any corresponds to x and y\n If multiple viewports contain the target pixel, last viewport drawn is returend\n Returns first viewport if no match */\nfunction getViewportFromCoordinates(viewports, pixel) {\n // find the last viewport that contains the pixel\n for (let i = viewports.length - 1; i >= 0; i--) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n return viewport;\n }\n }\n return viewports[0];\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport PickLayersPass from \"../passes/pick-layers-pass.js\";\nimport { getClosestObject, getUniqueObjects } from \"./picking/query-object.js\";\nimport { processPickInfo, getLayerPickingInfo, getEmptyPickingInfo } from \"./picking/pick-info.js\";\n/** Manages picking in a Deck context */\nexport default class DeckPicker {\n constructor(device) {\n this._pickable = true;\n this.device = device;\n this.pickLayersPass = new PickLayersPass(device);\n this.lastPickedInfo = {\n index: -1,\n layerId: null,\n info: null\n };\n }\n setProps(props) {\n if ('layerFilter' in props) {\n this.layerFilter = props.layerFilter;\n }\n if ('_pickable' in props) {\n this._pickable = props._pickable;\n }\n }\n finalize() {\n if (this.pickingFBO) {\n this.pickingFBO.destroy();\n }\n if (this.depthFBO) {\n this.depthFBO.destroy();\n }\n }\n /** Pick the closest info at given coordinate */\n pickObject(opts) {\n return this._pickClosestObject(opts);\n }\n /** Get all unique infos within a bounding box */\n pickObjects(opts) {\n return this._pickVisibleObjects(opts);\n }\n // Returns a new picking info object by assuming the last picked object is still picked\n getLastPickedObject({ x, y, layers, viewports }, lastPickedInfo = this.lastPickedInfo.info) {\n const lastPickedLayerId = lastPickedInfo && lastPickedInfo.layer && lastPickedInfo.layer.id;\n const lastPickedViewportId = lastPickedInfo && lastPickedInfo.viewport && lastPickedInfo.viewport.id;\n const layer = lastPickedLayerId ? layers.find(l => l.id === lastPickedLayerId) : null;\n const viewport = (lastPickedViewportId && viewports.find(v => v.id === lastPickedViewportId)) || viewports[0];\n const coordinate = viewport && viewport.unproject([x - viewport.x, y - viewport.y]);\n const info = {\n x,\n y,\n viewport,\n coordinate,\n layer\n };\n return { ...lastPickedInfo, ...info };\n }\n // Private\n /** Ensures that picking framebuffer exists and matches the canvas size */\n _resizeBuffer() {\n // Create a frame buffer if not already available\n if (!this.pickingFBO) {\n this.pickingFBO = this.device.createFramebuffer({\n colorAttachments: ['rgba8unorm'],\n depthStencilAttachment: 'depth16unorm'\n });\n if (this.device.isTextureFormatRenderable('rgba32float')) {\n const depthFBO = this.device.createFramebuffer({\n colorAttachments: ['rgba32float'],\n depthStencilAttachment: 'depth16unorm'\n });\n this.depthFBO = depthFBO;\n }\n }\n // Resize it to current canvas size (this is a noop if size hasn't changed)\n // @ts-expect-error\n const gl = this.device.gl;\n this.pickingFBO?.resize({ width: gl.canvas.width, height: gl.canvas.height });\n this.depthFBO?.resize({ width: gl.canvas.width, height: gl.canvas.height });\n }\n /** Preliminary filtering of the layers list. Skid picking pass if no layer is pickable. */\n _getPickable(layers) {\n if (this._pickable === false) {\n return null;\n }\n const pickableLayers = layers.filter(layer => this.pickLayersPass.shouldDrawLayer(layer) && !layer.isComposite);\n return pickableLayers.length ? pickableLayers : null;\n }\n /** Pick the closest object at the given coordinate */\n // eslint-disable-next-line max-statements,complexity\n _pickClosestObject({ layers, views, viewports, x, y, radius = 0, depth = 1, mode = 'query', unproject3D, onViewportActive, effects }) {\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return {\n result: [],\n emptyInfo: getEmptyPickingInfo({ viewports, x, y, pixelRatio })\n };\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // Top-left coordinates [x, y] to bottom-left coordinates [deviceX, deviceY]\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const devicePixelRange = this.device.canvasContext.cssToDevicePixels([x, y], true);\n const devicePixel = [\n devicePixelRange.x + Math.floor(devicePixelRange.width / 2),\n devicePixelRange.y + Math.floor(devicePixelRange.height / 2)\n ];\n const deviceRadius = Math.round(radius * pixelRatio);\n const { width, height } = this.pickingFBO;\n const deviceRect = this._getPickingRect({\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceWidth: width,\n deviceHeight: height\n });\n const cullRect = {\n x: x - radius,\n y: y - radius,\n width: radius * 2 + 1,\n height: radius * 2 + 1\n };\n let infos;\n const result = [];\n const affectedLayers = new Set();\n for (let i = 0; i < depth; i++) {\n let pickInfo;\n if (deviceRect) {\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass: `picking:${mode}`\n });\n pickInfo = getClosestObject({\n ...pickedResult,\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceRect\n });\n }\n else {\n pickInfo = {\n pickedColor: null,\n pickedObjectIndex: -1\n };\n }\n let z;\n if (pickInfo.pickedLayer && unproject3D && this.depthFBO) {\n const { pickedColors: pickedColors2 } = this._drawAndSample({\n layers: [pickInfo.pickedLayer],\n views,\n viewports,\n onViewportActive,\n deviceRect: {\n x: pickInfo.pickedX,\n y: pickInfo.pickedY,\n width: 1,\n height: 1\n },\n cullRect,\n effects,\n pass: `picking:${mode}:z`\n }, true);\n // picked value is in common space (pixels) from the camera target (viewport.position)\n // convert it to meters from the ground\n if (pickedColors2[3]) {\n z = pickedColors2[0];\n }\n }\n // Only exclude if we need to run picking again.\n // We need to run picking again if an object is detected AND\n // we have not exhausted the requested depth.\n if (pickInfo.pickedLayer && i + 1 < depth) {\n affectedLayers.add(pickInfo.pickedLayer);\n pickInfo.pickedLayer.disablePickingIndex(pickInfo.pickedObjectIndex);\n }\n // This logic needs to run even if no object is picked.\n infos = processPickInfo({\n pickInfo,\n lastPickedInfo: this.lastPickedInfo,\n mode,\n layers: pickableLayers,\n viewports,\n x,\n y,\n z,\n pixelRatio\n });\n for (const info of infos.values()) {\n if (info.layer) {\n result.push(info);\n }\n }\n // If no object is picked stop.\n if (!pickInfo.pickedColor) {\n break;\n }\n }\n // reset only affected buffers\n for (const layer of affectedLayers) {\n layer.restorePickingColors();\n }\n return { result, emptyInfo: infos.get(null) };\n }\n /** Pick all objects within the given bounding box */\n _pickVisibleObjects({ layers, views, viewports, x, y, width = 1, height = 1, mode = 'query', maxObjects = null, onViewportActive, effects }) {\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return [];\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n // @ts-expect-error TODO - assuming WebGL context\n const leftTop = this.device.canvasContext.cssToDevicePixels([x, y], true);\n // take left and top (y inverted in device pixels) from start location\n const deviceLeft = leftTop.x;\n const deviceTop = leftTop.y + leftTop.height;\n // take right and bottom (y inverted in device pixels) from end location\n // @ts-expect-error TODO - assuming WebGL context\n const rightBottom = this.device.canvasContext.cssToDevicePixels([x + width, y + height], true);\n const deviceRight = rightBottom.x + rightBottom.width;\n const deviceBottom = rightBottom.y;\n const deviceRect = {\n x: deviceLeft,\n y: deviceBottom,\n // deviceTop and deviceRight represent the first pixel outside the desired rect\n width: deviceRight - deviceLeft,\n height: deviceTop - deviceBottom\n };\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect: { x, y, width, height },\n effects,\n pass: `picking:${mode}`\n });\n const pickInfos = getUniqueObjects(pickedResult);\n // `getUniqueObjects` dedup by picked color\n // However different picked color may be linked to the same picked object, e.g. stroke and fill of the same polygon\n // picked from different sub layers of a GeoJsonLayer\n // Here after resolving the picked index with `layer.getPickingInfo`, we need to dedup again by unique picked objects\n const uniquePickedObjects = new Map();\n const uniqueInfos = [];\n const limitMaxObjects = Number.isFinite(maxObjects);\n for (let i = 0; i < pickInfos.length; i++) {\n if (limitMaxObjects && uniqueInfos.length >= maxObjects) {\n break;\n }\n const pickInfo = pickInfos[i];\n let info = {\n color: pickInfo.pickedColor,\n layer: null,\n index: pickInfo.pickedObjectIndex,\n picked: true,\n x,\n y,\n pixelRatio\n };\n info = getLayerPickingInfo({ layer: pickInfo.pickedLayer, info, mode });\n // info.layer is always populated because it's a picked pixel\n const pickedLayerId = info.layer.id;\n if (!uniquePickedObjects.has(pickedLayerId)) {\n uniquePickedObjects.set(pickedLayerId, new Set());\n }\n const uniqueObjectsInLayer = uniquePickedObjects.get(pickedLayerId);\n // info.object may be null if the layer is using non-iterable data.\n // Fall back to using index as identifier.\n const pickedObjectKey = info.object ?? info.index;\n if (!uniqueObjectsInLayer.has(pickedObjectKey)) {\n uniqueObjectsInLayer.add(pickedObjectKey);\n uniqueInfos.push(info);\n }\n }\n return uniqueInfos;\n }\n _drawAndSample({ layers, views, viewports, onViewportActive, deviceRect, cullRect, effects, pass }, pickZ = false) {\n const pickingFBO = pickZ ? this.depthFBO : this.pickingFBO;\n const opts = {\n layers,\n layerFilter: this.layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect,\n cullRect,\n effects,\n pass,\n pickZ,\n preRenderStats: {}\n };\n for (const effect of effects) {\n if (effect.useInPicking) {\n opts.preRenderStats[effect.id] = effect.preRender(opts);\n }\n }\n const { decodePickingColor } = this.pickLayersPass.render(opts);\n // Read from an already rendered picking buffer\n // Returns an Uint8ClampedArray of picked pixels\n const { x, y, width, height } = deviceRect;\n const pickedColors = new (pickZ ? Float32Array : Uint8Array)(width * height * 4);\n this.device.readPixelsToArrayWebGL(pickingFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: width,\n sourceHeight: height,\n target: pickedColors\n });\n return { pickedColors, decodePickingColor };\n }\n // Calculate a picking rect centered on deviceX and deviceY and clipped to device\n // Returns null if pixel is outside of device\n _getPickingRect({ deviceX, deviceY, deviceRadius, deviceWidth, deviceHeight }) {\n // Create a box of size `radius * 2 + 1` centered at [deviceX, deviceY]\n const x = Math.max(0, deviceX - deviceRadius);\n const y = Math.max(0, deviceY - deviceRadius);\n const width = Math.min(deviceWidth, deviceX + deviceRadius + 1) - x;\n const height = Math.min(deviceHeight, deviceY + deviceRadius + 1) - y;\n // x, y out of bounds.\n if (width <= 0 || height <= 0) {\n return null;\n }\n return { x, y, width, height };\n }\n}\n","import { EVENTS } from \"./constants.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nconst PLACEMENTS = {\n 'top-left': { top: 0, left: 0 },\n 'top-right': { top: 0, right: 0 },\n 'bottom-left': { bottom: 0, left: 0 },\n 'bottom-right': { bottom: 0, right: 0 },\n fill: { top: 0, left: 0, bottom: 0, right: 0 }\n};\nconst DEFAULT_PLACEMENT = 'top-left';\nconst ROOT_CONTAINER_ID = '__root';\nexport class WidgetManager {\n constructor({ deck, parentElement }) {\n /** Widgets added via the imperative API */\n this.defaultWidgets = [];\n /** Widgets received from the declarative API */\n this.widgets = [];\n /** Resolved widgets from both imperative and declarative APIs */\n this.resolvedWidgets = [];\n /** Mounted HTML containers */\n this.containers = {};\n /** Viewport provided to widget on redraw */\n this.lastViewports = {};\n this.deck = deck;\n this.parentElement = parentElement;\n }\n getWidgets() {\n return this.resolvedWidgets;\n }\n /** Declarative API to configure widgets */\n setProps(props) {\n if (props.widgets && !deepEqual(props.widgets, this.widgets, 1)) {\n this._setWidgets(props.widgets);\n }\n }\n finalize() {\n for (const widget of this.getWidgets()) {\n this._remove(widget);\n }\n this.defaultWidgets.length = 0;\n this.resolvedWidgets.length = 0;\n for (const id in this.containers) {\n this.containers[id].remove();\n }\n }\n /** Imperative API. Widgets added this way are not affected by the declarative prop. */\n addDefault(widget) {\n if (!this.defaultWidgets.find(w => w.id === widget.id)) {\n this._add(widget);\n this.defaultWidgets.push(widget);\n // Update widget list\n this._setWidgets(this.widgets);\n }\n }\n /** Resolve widgets from the declarative prop */\n _setWidgets(nextWidgets) {\n const oldWidgetMap = {};\n for (const widget of this.resolvedWidgets) {\n oldWidgetMap[widget.id] = widget;\n }\n // Clear and rebuild the list\n this.resolvedWidgets.length = 0;\n // Add all default widgets\n for (const widget of this.defaultWidgets) {\n oldWidgetMap[widget.id] = null;\n this.resolvedWidgets.push(widget);\n }\n for (let widget of nextWidgets) {\n const oldWidget = oldWidgetMap[widget.id];\n if (!oldWidget) {\n // Widget is new\n this._add(widget);\n }\n else if (\n // Widget placement changed\n oldWidget.viewId !== widget.viewId ||\n oldWidget.placement !== widget.placement) {\n this._remove(oldWidget);\n this._add(widget);\n }\n else if (widget !== oldWidget) {\n // Widget props changed\n oldWidget.setProps(widget.props);\n widget = oldWidget;\n }\n // mark as matched\n oldWidgetMap[widget.id] = null;\n this.resolvedWidgets.push(widget);\n }\n for (const id in oldWidgetMap) {\n const oldWidget = oldWidgetMap[id];\n if (oldWidget) {\n // No longer exists\n this._remove(oldWidget);\n }\n }\n this.widgets = nextWidgets;\n }\n _add(widget) {\n const { viewId = null, placement = DEFAULT_PLACEMENT } = widget;\n const element = widget.onAdd({ deck: this.deck, viewId });\n if (element) {\n this._getContainer(viewId, placement).append(element);\n }\n widget._element = element;\n }\n _remove(widget) {\n widget.onRemove();\n if (widget._element) {\n widget._element.remove();\n }\n widget._element = undefined;\n }\n /* global document */\n _getContainer(viewId, placement) {\n const containerId = viewId || ROOT_CONTAINER_ID;\n let viewContainer = this.containers[containerId];\n if (!viewContainer) {\n viewContainer = document.createElement('div');\n viewContainer.style.pointerEvents = 'none';\n viewContainer.style.position = 'absolute';\n viewContainer.style.overflow = 'hidden';\n this.parentElement?.append(viewContainer);\n this.containers[containerId] = viewContainer;\n }\n let container = viewContainer.querySelector(`.${placement}`);\n if (!container) {\n container = document.createElement('div');\n container.className = placement;\n container.style.position = 'absolute';\n container.style.zIndex = '2';\n Object.assign(container.style, PLACEMENTS[placement]);\n viewContainer.append(container);\n }\n return container;\n }\n _updateContainers() {\n const canvasWidth = this.deck.width;\n const canvasHeight = this.deck.height;\n for (const id in this.containers) {\n const viewport = this.lastViewports[id] || null;\n const visible = id === ROOT_CONTAINER_ID || viewport;\n const container = this.containers[id];\n if (visible) {\n container.style.display = 'block';\n // Align the container with the view\n container.style.left = `${viewport ? viewport.x : 0}px`;\n container.style.top = `${viewport ? viewport.y : 0}px`;\n container.style.width = `${viewport ? viewport.width : canvasWidth}px`;\n container.style.height = `${viewport ? viewport.height : canvasHeight}px`;\n }\n else {\n container.style.display = 'none';\n }\n }\n }\n onRedraw({ viewports, layers }) {\n const viewportsById = viewports.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n const { lastViewports } = this;\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (viewId) {\n // Attached to a specific view\n const viewport = viewportsById[viewId];\n if (viewport) {\n if (widget.onViewportChange && !viewport.equals(lastViewports[viewId])) {\n widget.onViewportChange(viewport);\n }\n widget.onRedraw?.({ viewports: [viewport], layers });\n }\n }\n else {\n // Not attached to a specific view\n if (widget.onViewportChange) {\n for (const viewport of viewports) {\n // eslint-disable-next-line max-depth\n if (!viewport.equals(lastViewports[viewport.id])) {\n widget.onViewportChange(viewport);\n }\n }\n }\n widget.onRedraw?.({ viewports, layers });\n }\n }\n this.lastViewports = viewportsById;\n this._updateContainers();\n }\n onHover(info, event) {\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (!viewId || viewId === info.viewport?.id) {\n widget.onHover?.(info, event);\n }\n }\n }\n onEvent(info, event) {\n const eventOptions = EVENTS[event.type];\n if (!eventOptions) {\n return;\n }\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (!viewId || viewId === info.viewport?.id) {\n widget[eventOptions.handler]?.(info, event);\n }\n }\n }\n}\n","/* global document */\nconst defaultStyle = {\n zIndex: '1',\n position: 'absolute',\n pointerEvents: 'none',\n color: '#a0a7b4',\n backgroundColor: '#29323c',\n padding: '10px',\n top: '0',\n left: '0',\n display: 'none'\n};\nexport default class Tooltip {\n constructor() {\n this.id = 'default-tooltip';\n this.placement = 'fill';\n this.props = {};\n this.isVisible = false;\n }\n onAdd({ deck }) {\n const el = document.createElement('div');\n el.className = 'deck-tooltip';\n Object.assign(el.style, defaultStyle);\n this.deck = deck;\n this.element = el;\n return el;\n }\n onRemove() {\n this.deck = undefined;\n this.element = undefined;\n }\n setProps() { }\n onViewportChange(viewport) {\n if (this.isVisible && viewport.id === this.lastViewport?.id && viewport !== this.lastViewport) {\n // Camera has moved, clear tooltip\n this.setTooltip(null);\n }\n }\n onHover(info) {\n const { deck } = this;\n const getTooltip = deck && deck.props.getTooltip;\n if (!getTooltip) {\n return;\n }\n const displayInfo = getTooltip(info);\n this.lastViewport = info.viewport;\n this.setTooltip(displayInfo, info.x, info.y);\n }\n setTooltip(displayInfo, x, y) {\n const el = this.element;\n if (!el) {\n return;\n }\n if (typeof displayInfo === 'string') {\n el.innerText = displayInfo;\n }\n else if (!displayInfo) {\n this.isVisible = false;\n el.style.display = 'none';\n return;\n }\n else {\n if (displayInfo.text) {\n el.innerText = displayInfo.text;\n }\n if (displayInfo.html) {\n el.innerHTML = displayInfo.html;\n }\n if (displayInfo.className) {\n el.className = displayInfo.className;\n }\n }\n this.isVisible = true;\n el.style.display = 'block';\n el.style.transform = `translate(${x}px, ${y}px)`;\n if (displayInfo && typeof displayInfo === 'object' && 'style' in displayInfo) {\n Object.assign(el.style, displayInfo.style);\n }\n }\n}\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.2.1\" !== 'undefined' ? \"4.2.1\" : 'latest';\n","import { isBrowser } from '@loaders.gl/loader-utils';\n// @ts-ignore TS2339: Property does not exist on type\nconst parseImageNode = globalThis.loaders?.parseImageNode;\nconst IMAGE_SUPPORTED = typeof Image !== 'undefined'; // NOTE: \"false\" positives if jsdom is installed\nconst IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== 'undefined';\nconst NODE_IMAGE_SUPPORTED = Boolean(parseImageNode);\nconst DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;\n/**\n * Checks if a loaders.gl image type is supported\n * @param type image type string\n */\nexport function isImageTypeSupported(type) {\n switch (type) {\n case 'auto':\n // Should only ever be false in Node.js, if polyfills have not been installed...\n return IMAGE_BITMAP_SUPPORTED || IMAGE_SUPPORTED || DATA_SUPPORTED;\n case 'imagebitmap':\n return IMAGE_BITMAP_SUPPORTED;\n case 'image':\n return IMAGE_SUPPORTED;\n case 'data':\n return DATA_SUPPORTED;\n default:\n throw new Error(`@loaders.gl/images: image ${type} not supported in this environment`);\n }\n}\n/**\n * Returns the \"most performant\" supported image type on this platform\n * @returns image type string\n */\nexport function getDefaultImageType() {\n if (IMAGE_BITMAP_SUPPORTED) {\n return 'imagebitmap';\n }\n if (IMAGE_SUPPORTED) {\n return 'image';\n }\n if (DATA_SUPPORTED) {\n return 'data';\n }\n // This should only happen in Node.js\n throw new Error('Install \\'@loaders.gl/polyfills\\' to parse images under Node.js');\n}\n","export function isImage(image) {\n return Boolean(getImageTypeOrNull(image));\n}\nexport function deleteImage(image) {\n switch (getImageType(image)) {\n case 'imagebitmap':\n image.close();\n break;\n default:\n // Nothing to do for images and image data objects\n }\n}\nexport function getImageType(image) {\n const format = getImageTypeOrNull(image);\n if (!format) {\n throw new Error('Not an image');\n }\n return format;\n}\nexport function getImageSize(image) {\n return getImageData(image);\n}\nexport function getImageData(image) {\n switch (getImageType(image)) {\n case 'data':\n return image;\n case 'image':\n case 'imagebitmap':\n // Extract the image data from the image via a canvas\n const canvas = document.createElement('canvas');\n // TODO - reuse the canvas?\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('getImageData');\n }\n // @ts-ignore\n canvas.width = image.width;\n // @ts-ignore\n canvas.height = image.height;\n // @ts-ignore\n context.drawImage(image, 0, 0);\n // @ts-ignore\n return context.getImageData(0, 0, image.width, image.height);\n default:\n throw new Error('getImageData');\n }\n}\n// PRIVATE\n// eslint-disable-next-line complexity\nfunction getImageTypeOrNull(image) {\n if (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {\n return 'imagebitmap';\n }\n if (typeof Image !== 'undefined' && image instanceof Image) {\n return 'image';\n }\n if (image && typeof image === 'object' && image.data && image.width && image.height) {\n return 'data';\n }\n return null;\n}\n","// SVG parsing has limitations, e.g:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=606319\nconst SVG_DATA_URL_PATTERN = /^data:image\\/svg\\+xml/;\nconst SVG_URL_PATTERN = /\\.svg((\\?|#).*)?$/;\nexport function isSVG(url) {\n return url && (SVG_DATA_URL_PATTERN.test(url) || SVG_URL_PATTERN.test(url));\n}\nexport function getBlobOrSVGDataUrl(arrayBuffer, url) {\n if (isSVG(url)) {\n // Prepare a properly tagged data URL, and load using normal mechanism\n const textDecoder = new TextDecoder();\n let xmlText = textDecoder.decode(arrayBuffer);\n // TODO Escape in browser to support e.g. Chinese characters\n try {\n if (typeof unescape === 'function' && typeof encodeURIComponent === 'function') {\n xmlText = unescape(encodeURIComponent(xmlText));\n }\n }\n catch (error) {\n throw new Error(error.message);\n }\n // base64 encoding is safer. utf-8 fails in some browsers\n const src = `data:image/svg+xml;base64,${btoa(xmlText)}`;\n return src;\n }\n return getBlob(arrayBuffer, url);\n}\nexport function getBlob(arrayBuffer, url) {\n if (isSVG(url)) {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606319\n // return new Blob([new Uint8Array(arrayBuffer)], {type: 'image/svg+xml'});\n throw new Error('SVG cannot be parsed directly to imagebitmap');\n }\n // TODO - how to determine mime type? Param? Sniff here?\n return new Blob([new Uint8Array(arrayBuffer)]); // MIME type not needed?\n}\n","import { getBlobOrSVGDataUrl } from \"./svg-utils.js\";\n// Parses html image from array buffer\nexport async function parseToImage(arrayBuffer, options, url) {\n // Note: image parsing requires conversion to Blob (for createObjectURL).\n // Potentially inefficient for not using `response.blob()` (and for File / Blob inputs)...\n // But presumably not worth adding 'blob' flag to loader objects?\n const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);\n const URL = self.URL || self.webkitURL;\n const objectUrl = typeof blobOrDataUrl !== 'string' && URL.createObjectURL(blobOrDataUrl);\n try {\n return await loadToImage(objectUrl || blobOrDataUrl, options);\n }\n finally {\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n }\n}\nexport async function loadToImage(url, options) {\n const image = new Image();\n image.src = url;\n // The `image.onload()` callback does not guarantee that the image has been decoded\n // so a main thread \"freeze\" can be incurred when using the image for the first time.\n // `Image.decode()` returns a promise that completes when image is decoded.\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode\n // Note: When calling `img.decode()`, we do not need to wait for `img.onload()`\n // Note: `HTMLImageElement.decode()` is not available in Edge and IE11\n if (options.image && options.image.decode && image.decode) {\n await image.decode();\n return image;\n }\n // Create a promise that tracks onload/onerror callbacks\n return await new Promise((resolve, reject) => {\n try {\n image.onload = () => resolve(image);\n image.onerror = (error) => {\n const message = error instanceof Error ? error.message : 'error';\n reject(new Error(message));\n };\n }\n catch (error) {\n reject(error);\n }\n });\n}\n","import { isSVG, getBlob } from \"./svg-utils.js\";\nimport { parseToImage } from \"./parse-to-image.js\";\nconst EMPTY_OBJECT = {};\nlet imagebitmapOptionsSupported = true;\n/**\n * Asynchronously parses an array buffer into an ImageBitmap - this contains the decoded data\n * ImageBitmaps are supported on worker threads, but not supported on Edge, IE11 and Safari\n * https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap#Browser_compatibility\n *\n * TODO - createImageBitmap supports source rect (5 param overload), pass through?\n */\nexport async function parseToImageBitmap(arrayBuffer, options, url) {\n let blob;\n // Cannot parse SVG directly to ImageBitmap, parse to Image first\n if (isSVG(url)) {\n // Note: this only works on main thread\n const image = await parseToImage(arrayBuffer, options, url);\n blob = image;\n }\n else {\n // Create blob from the array buffer\n blob = getBlob(arrayBuffer, url);\n }\n const imagebitmapOptions = options && options.imagebitmap;\n return await safeCreateImageBitmap(blob, imagebitmapOptions);\n}\n/**\n * Safely creates an imageBitmap with options\n * *\n * Firefox crashes if imagebitmapOptions is supplied\n * Avoid supplying if not provided or supported, remember if not supported\n */\nasync function safeCreateImageBitmap(blob, imagebitmapOptions = null) {\n if (isEmptyObject(imagebitmapOptions) || !imagebitmapOptionsSupported) {\n imagebitmapOptions = null;\n }\n if (imagebitmapOptions) {\n try {\n // @ts-ignore Options\n return await createImageBitmap(blob, imagebitmapOptions);\n }\n catch (error) {\n console.warn(error); // eslint-disable-line\n imagebitmapOptionsSupported = false;\n }\n }\n return await createImageBitmap(blob);\n}\nfunction isEmptyObject(object) {\n // @ts-ignore\n for (const key in object || EMPTY_OBJECT) {\n return false;\n }\n return true;\n}\n","// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// code adapted from https://github.com/sindresorhus/file-type under MIT license\n/**\n * Tests if a buffer is in ISO base media file format (ISOBMFF) @see https://en.wikipedia.org/wiki/ISO_base_media_file_format\n * (ISOBMFF is a media container standard based on the Apple QuickTime container format)\n */\nexport function getISOBMFFMediaType(buffer) {\n // Almost all ISO base media files start with `ftyp` box. (It's not required to be first, but it's recommended to be.)\n if (!checkString(buffer, 'ftyp', 4)) {\n return null;\n }\n // Extra check: test for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n if ((buffer[8] & 0x60) === 0x00) {\n return null;\n }\n // `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n return decodeMajorBrand(buffer);\n}\n/**\n * brands explained @see https://github.com/strukturag/libheif/issues/83\n * code adapted from @see https://github.com/sindresorhus/file-type/blob/main/core.js#L489-L492\n */\nexport function decodeMajorBrand(buffer) {\n const brandMajor = getUTF8String(buffer, 8, 12).replace('\\0', ' ').trim();\n switch (brandMajor) {\n case 'avif':\n case 'avis':\n return { extension: 'avif', mimeType: 'image/avif' };\n default:\n return null;\n }\n // We don't need these now, but they are easy to add\n // case 'mif1':\n // return {extension: 'heic', mimeType: 'image/heif'};\n // case 'msf1':\n // return {extension: 'heic', mimeType: 'image/heif-sequence'};\n // case 'heic':\n // case 'heix':\n // return {extension: 'heic', mimeType: 'image/heic'};\n // case 'hevc':\n // case 'hevx':\n // return {extension: 'heic', mimeType: 'image/heic-sequence'};\n // case 'qt':\n // return {ext: 'mov', mime: 'video/quicktime'};\n // case 'M4V':\n // case 'M4VH':\n // case 'M4VP':\n // return {ext: 'm4v', mime: 'video/x-m4v'};\n // case 'M4P':\n // return {ext: 'm4p', mime: 'video/mp4'};\n // case 'M4B':\n // return {ext: 'm4b', mime: 'audio/mp4'};\n // case 'M4A':\n // return {ext: 'm4a', mime: 'audio/x-m4a'};\n // case 'F4V':\n // return {ext: 'f4v', mime: 'video/mp4'};\n // case 'F4P':\n // return {ext: 'f4p', mime: 'video/mp4'};\n // case 'F4A':\n // return {ext: 'f4a', mime: 'audio/mp4'};\n // case 'F4B':\n // return {ext: 'f4b', mime: 'audio/mp4'};\n // case 'crx':\n // return {ext: 'cr3', mime: 'image/x-canon-cr3'};\n // default:\n // if (brandMajor.startsWith('3g')) {\n // if (brandMajor.startsWith('3g2')) {\n // return {ext: '3g2', mime: 'video/3gpp2'};\n // }\n // return {ext: '3gp', mime: 'video/3gpp'};\n // }\n // return {ext: 'mp4', mime: 'video/mp4'};\n}\n/** Interpret a chunk of bytes as a UTF8 string */\nfunction getUTF8String(array, start, end) {\n return String.fromCharCode(...array.slice(start, end));\n}\nfunction stringToBytes(string) {\n return [...string].map((character) => character.charCodeAt(0));\n}\nfunction checkString(buffer, header, offset = 0) {\n const headerBytes = stringToBytes(header);\n for (let i = 0; i < headerBytes.length; ++i) {\n if (headerBytes[i] !== buffer[i + offset]) {\n return false;\n }\n }\n return true;\n}\n","// Attributions\n// * Based on binary-gltf-utils under MIT license: Copyright (c) 2016-17 Karl Cheng\nimport { getISOBMFFMediaType } from \"./parse-isobmff-binary.js\";\nconst BIG_ENDIAN = false;\nconst LITTLE_ENDIAN = true;\n/**\n * Extracts `{mimeType, width and height}` from a memory buffer containing a known image format\n * Currently supports `image/png`, `image/jpeg`, `image/bmp` and `image/gif`.\n * @param binaryData: DataView | ArrayBuffer image file memory to parse\n * @returns metadata or null if memory is not a valid image file format layout.\n */\nexport function getBinaryImageMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n return (getPngMetadata(dataView) ||\n getJpegMetadata(dataView) ||\n getGifMetadata(dataView) ||\n getBmpMetadata(dataView) ||\n getISOBMFFMetadata(dataView));\n}\n// ISOBMFF\nfunction getISOBMFFMetadata(binaryData) {\n const buffer = new Uint8Array(binaryData instanceof DataView ? binaryData.buffer : binaryData);\n const mediaType = getISOBMFFMediaType(buffer);\n if (!mediaType) {\n return null;\n }\n return {\n mimeType: mediaType.mimeType,\n // TODO - decode width and height\n width: 0,\n height: 0\n };\n}\n// PNG\nfunction getPngMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check file contains the first 4 bytes of the PNG signature.\n const isPng = dataView.byteLength >= 24 && dataView.getUint32(0, BIG_ENDIAN) === 0x89504e47;\n if (!isPng) {\n return null;\n }\n // Extract size from a binary PNG file\n return {\n mimeType: 'image/png',\n width: dataView.getUint32(16, BIG_ENDIAN),\n height: dataView.getUint32(20, BIG_ENDIAN)\n };\n}\n// GIF\n// Extract size from a binary GIF file\n// TODO: GIF is not this simple\nfunction getGifMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check first 4 bytes of the GIF signature (\"GIF8\").\n const isGif = dataView.byteLength >= 10 && dataView.getUint32(0, BIG_ENDIAN) === 0x47494638;\n if (!isGif) {\n return null;\n }\n // GIF is little endian.\n return {\n mimeType: 'image/gif',\n width: dataView.getUint16(6, LITTLE_ENDIAN),\n height: dataView.getUint16(8, LITTLE_ENDIAN)\n };\n}\n// BMP\n// TODO: BMP is not this simple\nexport function getBmpMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check magic number is valid (first 2 characters should be \"BM\").\n // The mandatory bitmap file header is 14 bytes long.\n const isBmp = dataView.byteLength >= 14 &&\n dataView.getUint16(0, BIG_ENDIAN) === 0x424d &&\n dataView.getUint32(2, LITTLE_ENDIAN) === dataView.byteLength;\n if (!isBmp) {\n return null;\n }\n // BMP is little endian.\n return {\n mimeType: 'image/bmp',\n width: dataView.getUint32(18, LITTLE_ENDIAN),\n height: dataView.getUint32(22, LITTLE_ENDIAN)\n };\n}\n// JPEG\n// Extract width and height from a binary JPEG file\nfunction getJpegMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check file contains the JPEG \"start of image\" (SOI) marker\n // followed by another marker.\n const isJpeg = dataView.byteLength >= 3 &&\n dataView.getUint16(0, BIG_ENDIAN) === 0xffd8 &&\n dataView.getUint8(2) === 0xff;\n if (!isJpeg) {\n return null;\n }\n const { tableMarkers, sofMarkers } = getJpegMarkers();\n // Exclude the two byte SOI marker.\n let i = 2;\n while (i + 9 < dataView.byteLength) {\n const marker = dataView.getUint16(i, BIG_ENDIAN);\n // The frame that contains the width and height of the JPEG image.\n if (sofMarkers.has(marker)) {\n return {\n mimeType: 'image/jpeg',\n height: dataView.getUint16(i + 5, BIG_ENDIAN), // Number of lines\n width: dataView.getUint16(i + 7, BIG_ENDIAN) // Number of pixels per line\n };\n }\n // Miscellaneous tables/data preceding the frame header.\n if (!tableMarkers.has(marker)) {\n return null;\n }\n // Length includes size of length parameter but not the two byte header.\n i += 2;\n i += dataView.getUint16(i, BIG_ENDIAN);\n }\n return null;\n}\nfunction getJpegMarkers() {\n // Tables/misc header markers.\n // DQT, DHT, DAC, DRI, COM, APP_n\n const tableMarkers = new Set([0xffdb, 0xffc4, 0xffcc, 0xffdd, 0xfffe]);\n for (let i = 0xffe0; i < 0xfff0; ++i) {\n tableMarkers.add(i);\n }\n // SOF markers and DHP marker.\n // These markers are after tables/misc data.\n const sofMarkers = new Set([\n 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc9, 0xffca, 0xffcb, 0xffcd, 0xffce,\n 0xffcf, 0xffde\n ]);\n return { tableMarkers, sofMarkers };\n}\n// TODO - move into image module?\nfunction toDataView(data) {\n if (data instanceof DataView) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new DataView(data.buffer);\n }\n // TODO: make these functions work for Node.js buffers?\n // if (bufferToArrayBuffer) {\n // data = bufferToArrayBuffer(data);\n // }\n // Careful - Node Buffers will look like ArrayBuffers (keep after isBuffer)\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n }\n throw new Error('toDataView');\n}\n","// import type { ImageType } from '@loaders.gl/schema';\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseImage } from \"./lib/parsers/parse-image.js\";\nimport { getBinaryImageMetadata } from \"./lib/category-api/binary-image-api.js\";\nconst EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg', 'avif'];\nconst MIME_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/avif',\n 'image/bmp',\n 'image/vnd.microsoft.icon',\n 'image/svg+xml'\n];\nconst DEFAULT_IMAGE_LOADER_OPTIONS = {\n image: {\n type: 'auto',\n decode: true // if format is HTML\n }\n // imagebitmap: {} - passes (platform dependent) parameters to ImageBitmap constructor\n};\n/**\n * Loads a platform-specific image type\n * Note: This type can be used as input data to WebGL texture creation\n */\nexport const ImageLoader = {\n dataType: null,\n batchType: null,\n id: 'image',\n module: 'images',\n name: 'Images',\n version: VERSION,\n mimeTypes: MIME_TYPES,\n extensions: EXTENSIONS,\n parse: parseImage,\n // TODO: byteOffset, byteLength;\n tests: [(arrayBuffer) => Boolean(getBinaryImageMetadata(new DataView(arrayBuffer)))],\n options: DEFAULT_IMAGE_LOADER_OPTIONS\n};\n","import { assert } from '@loaders.gl/loader-utils';\nimport { isImageTypeSupported, getDefaultImageType } from \"../category-api/image-type.js\";\nimport { getImageData } from \"../category-api/parsed-image-api.js\";\nimport { parseToImage } from \"./parse-to-image.js\";\nimport { parseToImageBitmap } from \"./parse-to-image-bitmap.js\";\nimport { parseToNodeImage } from \"./parse-to-node-image.js\";\n// Parse to platform defined image type (data on node, ImageBitmap or HTMLImage on browser)\n// eslint-disable-next-line complexity\nexport async function parseImage(arrayBuffer, options, context) {\n options = options || {};\n const imageOptions = options.image || {};\n // The user can request a specific output format via `options.image.type`\n const imageType = imageOptions.type || 'auto';\n const { url } = context || {};\n // Note: For options.image.type === `data`, we may still need to load as `image` or `imagebitmap`\n const loadType = getLoadableImageType(imageType);\n let image;\n switch (loadType) {\n case 'imagebitmap':\n image = await parseToImageBitmap(arrayBuffer, options, url);\n break;\n case 'image':\n image = await parseToImage(arrayBuffer, options, url);\n break;\n case 'data':\n // Node.js loads imagedata directly\n image = await parseToNodeImage(arrayBuffer, options);\n break;\n default:\n assert(false);\n }\n // Browser: if options.image.type === 'data', we can now extract data from the loaded image\n if (imageType === 'data') {\n image = getImageData(image);\n }\n return image;\n}\n// Get a loadable image type from image type\nfunction getLoadableImageType(type) {\n switch (type) {\n case 'auto':\n case 'data':\n // Browser: For image data we need still need to load using an image format\n // Node: the default image type is `data`.\n return getDefaultImageType();\n default:\n // Throw an error if not supported\n isImageTypeSupported(type);\n return type;\n }\n}\n","import { assert } from '@loaders.gl/loader-utils';\nimport { getBinaryImageMetadata } from \"../category-api/binary-image-api.js\";\n// Use polyfills if installed to parsed image using get-pixels\nexport async function parseToNodeImage(arrayBuffer, options) {\n const { mimeType } = getBinaryImageMetadata(arrayBuffer) || {};\n // @ts-ignore\n const parseImageNode = globalThis.loaders?.parseImageNode;\n assert(parseImageNode); // '@loaders.gl/polyfills not installed'\n // @ts-expect-error TODO should we throw error in this case?\n return await parseImageNode(arrayBuffer, mimeType);\n}\n","function isJSON(text) {\n const firstChar = text[0];\n const lastChar = text[text.length - 1];\n return (firstChar === '{' && lastChar === '}') || (firstChar === '[' && lastChar === ']');\n}\n// A light weight version instead of @loaders.gl/json (stream processing etc.)\nexport default {\n dataType: null,\n batchType: null,\n id: 'JSON',\n name: 'JSON',\n module: '',\n version: '',\n options: {},\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json', 'application/geo+json'],\n testText: isJSON,\n parseTextSync: JSON.parse\n};\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { registerLoaders } from '@loaders.gl/core';\nimport { ImageLoader } from '@loaders.gl/images';\nimport log from \"../utils/log.js\";\nimport { register } from \"../debug/index.js\";\nimport jsonLoader from \"../utils/json-loader.js\";\nfunction checkVersion() {\n // Version detection using typescript plugin.\n // Fallback for tests and SSR since global variable is defined by esbuild.\n const version = typeof \"9.0.17\" !== 'undefined'\n ? \"9.0.17\" : globalThis.DECK_VERSION || 'untranspiled source';\n // Note: a `deck` object not created by deck.gl may exist in the global scope\n const existingVersion = globalThis.deck && globalThis.deck.VERSION;\n if (existingVersion && existingVersion !== version) {\n throw new Error(`deck.gl - multiple versions detected: ${existingVersion} vs ${version}`);\n }\n if (!existingVersion) {\n log.log(1, `deck.gl ${version}`)();\n globalThis.deck = {\n ...globalThis.deck,\n VERSION: version,\n version,\n log,\n // experimental\n _registerLoggers: register\n };\n registerLoaders([\n jsonLoader,\n // @ts-expect-error non-standard Loader format\n [ImageLoader, { imagebitmap: { premultiplyAlpha: 'none' } }]\n ]);\n }\n return version;\n}\nexport const VERSION = checkVersion();\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log } from '@probe.gl/log';\n/** Global log instance */\nexport const log = new Log({ id: 'luma.gl' });\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Stats } from '@probe.gl/stats';\n/**\n * Helper class managing a collection of probe.gl stats objects\n */\nexport class StatsManager {\n stats = new Map();\n getStats(name) {\n return this.get(name);\n }\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({ id: name }));\n }\n return this.stats.get(name);\n }\n}\n/** Global stats for all luma.gl devices */\nexport const lumaStats = new StatsManager();\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@probe.gl/env';\nimport { log } from \"./utils/log.js\";\nimport { lumaStats } from \"./utils/stats-manager.js\";\n/**\n * By adding the result of init() to Device.VERSION we guarantee it will be called\n * @returns version\n */\nfunction initializeLuma() {\n // Version detection using babel plugin\n // @ts-expect-error\n const VERSION = typeof \"9.0.14\" !== 'undefined' ? \"9.0.14\" : 'running from source';\n const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n // Assign luma.log.level in console to control logging: \\\n // 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n // luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n if (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n }\n if (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats\n };\n }\n return VERSION;\n}\nexport const VERSION = initializeLuma();\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uidCounters = {};\n/**\n * Returns a UID.\n * @param id= - Identifier base name\n * @return uid\n **/\nexport function uid(id = 'id') {\n uidCounters[id] = uidCounters[id] || 1;\n const count = uidCounters[id]++;\n return `${id}-${count}`;\n}\n/** Returns true if given object is empty, false otherwise. */\nexport function isObjectEmpty(obj) {\n let isEmpty = true;\n // @ts-ignore key is unused\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n return isEmpty;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { uid } from \"../../utils/utils.js\";\n/**\n * Base class for GPU (WebGPU/WebGL) Resources\n */\nexport class Resource {\n /** Default properties for resource */\n static defaultProps = {\n id: 'undefined',\n handle: undefined,\n userData: undefined\n };\n /** props.id, for debugging. */\n id;\n props;\n userData = {};\n _device;\n /** Whether this resource has been destroyed */\n destroyed = false;\n /** For resources that allocate GPU memory */\n allocatedBytes = 0;\n /** Attached resources will be destroyed when this resource is destroyed. Tracks auto-created \"sub\" resources. */\n _attachedResources = new Set();\n /**\n * Create a new Resource. Called from Subclass\n */\n constructor(device, props, defaultProps) {\n if (!device) {\n throw new Error('no device');\n }\n this._device = device;\n this.props = selectivelyMerge(props, defaultProps);\n const id = this.props.id !== 'undefined' ? this.props.id : uid(this[Symbol.toStringTag]);\n this.props.id = id;\n this.id = id;\n this.userData = this.props.userData || {};\n this.addStats();\n }\n /**\n * destroy can be called on any resource to release it before it is garbage collected.\n */\n destroy() {\n this.destroyResource();\n }\n /** @deprecated Use destroy() */\n delete() {\n this.destroy();\n return this;\n }\n toString() {\n return `${this[Symbol.toStringTag] || this.constructor.name}(${this.id})`;\n }\n /**\n * Combines a map of user props and default props, only including props from defaultProps\n * @returns returns a map of overridden default props\n */\n getProps() {\n return this.props;\n }\n // ATTACHED RESOURCES\n /**\n * Attaches a resource. Attached resources are auto destroyed when this resource is destroyed\n * Called automatically when sub resources are auto created but can be called by application\n */\n attachResource(resource) {\n this._attachedResources.add(resource);\n }\n /**\n * Detach an attached resource. The resource will no longer be auto-destroyed when this resource is destroyed.\n */\n detachResource(resource) {\n this._attachedResources.delete(resource);\n }\n /**\n * Destroys a resource (only if owned), and removes from the owned (auto-destroy) list for this resource.\n */\n destroyAttachedResource(resource) {\n if (this._attachedResources.delete(resource)) {\n resource.destroy();\n }\n }\n /** Destroy all owned resources. Make sure the resources are no longer needed before calling. */\n destroyAttachedResources() {\n for (const resource of Object.values(this._attachedResources)) {\n resource.destroy();\n }\n // don't remove while we are iterating\n this._attachedResources = new Set();\n }\n // PROTECTED METHODS\n /** Perform all destroy steps. Can be called by derived resources when overriding destroy() */\n destroyResource() {\n this.destroyAttachedResources();\n this.removeStats();\n this.destroyed = true;\n }\n /** Called by .destroy() to track object destruction. Subclass must call if overriding destroy() */\n removeStats() {\n const stats = this._device.statsManager.getStats('Resource Counts');\n const name = this[Symbol.toStringTag];\n stats.get(`${name}s Active`).decrementCount();\n }\n /** Called by subclass to track memory allocations */\n trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {\n const stats = this._device.statsManager.getStats('Resource Counts');\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n this.allocatedBytes = bytes;\n }\n /** Called by subclass to track memory deallocations */\n trackDeallocatedMemory(name = this[Symbol.toStringTag]) {\n const stats = this._device.statsManager.getStats('Resource Counts');\n stats.get('GPU Memory').subtractCount(this.allocatedBytes);\n stats.get(`${name} Memory`).subtractCount(this.allocatedBytes);\n this.allocatedBytes = 0;\n }\n /** Called by resource constructor to track object creation */\n addStats() {\n const stats = this._device.statsManager.getStats('Resource Counts');\n const name = this[Symbol.toStringTag];\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n}\n/**\n * Combines a map of user props and default props, only including props from defaultProps\n * @param props\n * @param defaultProps\n * @returns returns a map of overridden default props\n */\nfunction selectivelyMerge(props, defaultProps) {\n const mergedProps = { ...defaultProps };\n for (const key in props) {\n if (props[key] !== undefined) {\n mergedProps[key] = props[key];\n }\n }\n return mergedProps;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/** Abstract GPU buffer */\nexport class Buffer extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n usage: 0, // Buffer.COPY_DST | Buffer.COPY_SRC\n byteLength: 0,\n byteOffset: 0,\n data: null,\n indexType: 'uint16',\n mappedAtCreation: false\n };\n // Usage Flags\n static MAP_READ = 0x01;\n static MAP_WRITE = 0x02;\n static COPY_SRC = 0x0004;\n static COPY_DST = 0x0008;\n /** Index buffer */\n static INDEX = 0x0010;\n /** Vertex buffer */\n static VERTEX = 0x0020;\n /** Uniform buffer */\n static UNIFORM = 0x0040;\n /** Storage buffer */\n static STORAGE = 0x0080;\n static INDIRECT = 0x0100;\n static QUERY_RESOLVE = 0x0200;\n get [Symbol.toStringTag]() {\n return 'Buffer';\n }\n /** The usage with which this buffer was created */\n usage;\n /** For index buffers, whether indices are 16 or 32 bit */\n indexType;\n /** \"Time\" of last update */\n updateTimestamp;\n constructor(device, props) {\n const deducedProps = { ...props };\n // Deduce indexType\n if ((props.usage || 0) & Buffer.INDEX && !props.indexType) {\n if (props.data instanceof Uint32Array) {\n deducedProps.indexType = 'uint32';\n }\n else if (props.data instanceof Uint16Array) {\n deducedProps.indexType = 'uint16';\n }\n }\n super(device, deducedProps, Buffer.defaultProps);\n this.usage = props.usage || 0;\n this.indexType = deducedProps.indexType;\n // TODO - perhaps this should be set on async write completion?\n this.updateTimestamp = device.incrementTimestamp();\n }\n /** Read data synchronously. @note WebGL2 only */\n readSyncWebGL(byteOffset, byteLength) {\n throw new Error('not implemented');\n }\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n /** Max amount of debug data saved. Two vec4's */\n static DEBUG_DATA_MAX_LENGTH = 32;\n /** A partial CPU-side copy of the data in this buffer, for debugging purposes */\n debugData = new ArrayBuffer(0);\n /** This doesn't handle partial non-zero offset updates correctly */\n _setDebugData(data, byteOffset, byteLength) {\n const buffer = ArrayBuffer.isView(data) ? data.buffer : data;\n const debugDataLength = Math.min(data ? data.byteLength : byteLength, Buffer.DEBUG_DATA_MAX_LENGTH);\n if (data === null) {\n this.debugData = new ArrayBuffer(debugDataLength);\n }\n else if (byteOffset === 0 && byteLength === data.byteLength) {\n this.debugData = buffer.slice(0, debugDataLength);\n }\n else {\n this.debugData = buffer.slice(byteOffset, byteOffset + debugDataLength);\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Decodes a vertex type, returning byte length and flags (integer, signed, normalized) */\nexport function decodeVertexType(type) {\n const dataType = TYPE_MAP[type];\n const bytes = getDataTypeBytes(dataType);\n const normalized = type.includes('norm');\n const integer = !normalized && !type.startsWith('float');\n const signed = type.startsWith('s');\n return {\n dataType: TYPE_MAP[type],\n byteLength: bytes,\n integer,\n signed,\n normalized\n };\n}\nfunction getDataTypeBytes(type) {\n const bytes = TYPE_SIZES[type];\n // assert(bytes);\n return bytes;\n}\nconst TYPE_MAP = {\n uint8: 'uint8',\n sint8: 'sint8',\n unorm8: 'uint8',\n snorm8: 'sint8',\n uint16: 'uint16',\n sint16: 'sint16',\n unorm16: 'uint16',\n snorm16: 'sint16',\n float16: 'float16',\n float32: 'float32',\n uint32: 'uint32',\n sint32: 'sint32'\n};\nconst TYPE_SIZES = {\n uint8: 1,\n sint8: 1,\n uint16: 2,\n sint16: 2,\n float16: 2,\n float32: 4,\n uint32: 4,\n sint32: 4\n};\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { decodeVertexType } from \"./decode-data-type.js\";\n// prettier-ignore\nconst COMPRESSED_TEXTURE_FORMAT_PREFIXES = [\n 'bc1', 'bc2', 'bc3', 'bc4', 'bc5', 'bc6', 'bc7', 'etc1', 'etc2', 'eac', 'atc', 'astc', 'pvrtc'\n];\nconst REGEX = /^(rg?b?a?)([0-9]*)([a-z]*)(-srgb)?(-webgl|-unsized)?$/;\n/**\n * Returns true if a texture format is GPU compressed\n */\nexport function isTextureFormatCompressed(textureFormat) {\n return COMPRESSED_TEXTURE_FORMAT_PREFIXES.some(prefix => textureFormat.startsWith(prefix));\n}\n/**\n * Decodes a vertex format, returning type, components, byte length and flags (integer, signed, normalized)\n */\nexport function decodeTextureFormat(format) {\n const matches = REGEX.exec(format);\n if (matches) {\n const [, format, length, type, srgb, suffix] = matches;\n if (format) {\n const dataType = `${type}${length}`;\n const decodedType = decodeVertexType(dataType);\n return {\n format: format,\n components: format.length,\n // dataType - overwritten by decodedType\n srgb: srgb === '-srgb',\n unsized: suffix === '-unsized',\n webgl: suffix === '-webgl',\n ...decodedType\n };\n }\n }\n return decodeNonStandardFormat(format);\n}\n// https://www.w3.org/TR/webgpu/#texture-format-caps\nconst EXCEPTIONS = {\n // Packed 16 bit formats\n 'rgba4unorm-webgl': { format: 'rgba', bpp: 2 },\n 'rgb565unorm-webgl': { format: 'rgb', bpp: 2 },\n 'rgb5a1unorm-webgl': { format: 'rgba', bbp: 2 },\n // Packed 32 bit formats\n rgb9e5ufloat: { format: 'rgb', bbp: 4 },\n rg11b10ufloat: { format: 'rgb', bbp: 4 },\n rgb10a2unorm: { format: 'rgba', bbp: 4 },\n 'rgb10a2uint-webgl': { format: 'rgba', bbp: 4 },\n // Depth/stencil\n stencil8: { components: 1, bpp: 1, a: 'stencil' },\n depth16unorm: { components: 1, bpp: 2, a: 'depth' },\n depth24plus: { components: 1, bpp: 3, a: 'depth' },\n depth32float: { components: 1, bpp: 4, a: 'depth' },\n 'depth24plus-stencil8': { components: 2, bpp: 4, a: 'depth-stencil' },\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': { components: 2, bpp: 4, a: 'depth-stencil' },\n // \"depth32float-stencil8\" feature\n 'depth32float-stencil8': { components: 2, bpp: 4, a: 'depth-stencil' }\n};\nfunction decodeNonStandardFormat(format) {\n const data = EXCEPTIONS[format];\n if (!data) {\n throw new Error(`Unknown format ${format}`);\n }\n return {\n format: data.format || '',\n components: data.components || data.format?.length || 1,\n byteLength: data.bpp || 1,\n srgb: false,\n unsized: false\n };\n}\n/*\n'r8unorm':\t{s: \"float\"}, // \t✓\t✓\t✓\t},\n'r8snorm':\t{s: \"float\"}, // \t\t✓\t\t},\n'r8uint':\t{s: \"uint\"}, // \t✓\t✓\t\t},\n'r8sint':\t{s: \"sint\"}, // \t✓\t✓\t\t},\n'rg8unorm':\t{s: \"float\"}, // \t✓\t✓\t✓\t},\n'rg8snorm':\t{s: \"float\"}, // \t\t✓\t\t},\n'rg8uint':\t{s: \"uint\"}, // \t✓\t✓\t\t},\n'rg8sint':\t{s: \"sint\"}, // \t✓\t✓\t\t},\n'rgba8unorm':\t{s: \"float\"}, // \t✓\t✓\t✓\t✓},\n'rgba8unorm-srgb': {s: \"float\"}, // \t✓\t✓\t✓\t},\n'rgba8snorm':\t{s: \"float\"}, // \t\t✓\t\t✓},\n'rgba8uint':\t{s: \"uint\"}, // \t✓\t✓\t\t✓},\n'rgba8sint':\t{s: \"sint\"}, // \t✓\t✓\t\t✓},\n'bgra8unorm':\t{s: \"float\"}, // \t✓\t✓\t✓\t},\n'bgra8unorm-srgb': {s: \"float\"}, // \t✓\t✓\t✓\t},\n// 16-bit per component\n'r16uint': {s: \"uint\"}, // \t✓\t✓\t\t},\n'r16sint': {s: \"sint\"}, // \t✓\t✓\t\t},\n'r16float': {s: \"float\"}, // \t✓\t✓\t✓\t},\n'rg16uint': {s: \"uint\"}, // \t✓\t✓\t\t},\n'rg16sint': {s: \"sint\"}, // \t✓\t✓\t\t},\n'rg16float': {s: \"float\"}, // \t✓\t✓\t✓\t},\n'rgba16uint': {s: \"uint\"}, // \t✓\t✓\t\t✓},\n'rgba16sint': {s: \"sint\"}, // \t✓\t✓\t\t✓},\n'rgba16float': {s: \"float\"}, // \t✓\t✓\t✓\t✓},\n// 32-bit per component\n'r32uint': {s: \"uint\"}, // \t✓\t\t\t✓},\n'r32sint': {s: \"sint\"}, // \t✓\t\t\t✓},\n'r32float': {\"unfilterable-float\"\t✓\t✓\t\t✓},\n'rg32uint': {s: \"uint\"}, // \t✓\t\t\t✓},\n'rg32sint': {s: \"sint\"}, // \t✓\t\t\t✓},\n'rg32float': {\"unfilterable-float\"\t✓\t\t\t✓},\n'rgba32uint': {s: \"uint\"}, // \t✓\t\t\t✓},\n'rgba32sint': {s: \"sint\"}, // \t✓\t\t\t✓},\n'rgba32float': {\"unfilterable-float\"\t✓\t\t\t✓},\n// mixed component width\n'rgb10a2unorm': {s: \"float\"}, // \t✓\t✓\t✓\t}\n'rg11b10ufloat': {s: \"float\"}, // \t\t✓\t\t}\n// Format\tBytes per texel\tAspect\tGPUTextureSampleType\tValid image copy source\tValid image copy destination\n'stencil8': {1 − 4\tstencil\t\"uint\"\t✓}\n'depth16unorm': {2\tdepth\t\"depth\"\t✓}\n'depth24plus': {4\tdepth\t\"depth\"\t✗}\n'depth24plus': {stencil8\t4 − 8\tdepth\t\"depth\"\t✗}\n'stencil': {s: \"uint\"}, // \t✓}\n'depth32float': {4\tdepth\t\"depth\"\t✓\t✗}\n'depth24unorm': {stencil8\t4\tdepth\t\"depth\"\t✗}\n'stencil': {s: \"uint\"}, // \t✓}\n'depth32float': {stencil8}\n\n// Format\tBytes per block\tGPUTextureSampleType\tBlock Size\tFeature\n'rgb9e5ufloat': {c: 4, s: \"float\",\tbpp: 4/(1*1)},\n\n'bc1-rgba-unorm': {c: 4. s: \"float\", bpp: 8/(4 * 4) f: 'texture-compression-bc'},\n'bc1-rgba-unorm-srgb': {c: 4. s: \"float\", bpp: 8/(4 * 4) f: 'texture-compression-bc'},\n'bc2-rgba-unorm': {c: 4. s: \"float\", bpp: 16/(4 * 4) f: 'texture-compression-bc'},\n'bc2-rgba-unorm-srgb': {c: 4. s: \"float\", bpp: 16/(4 * 4) f: 'texture-compression-bc'},\n'bc3-rgba-unorm': {c: 4. s: \"float\", bpp: 16/(4 * 4) f: 'texture-compression-bc'},\n'bc3-rgba-unorm-srgb': {c: 4. s: \"float\", bpp: 16/(4 * 4) f: 'texture-compression-bc'},\n'bc4-r-unorm': {c: 1. s: \"float\", bpp: 8/(4 * 4) f: 'texture-compression-bc'},\n'bc4-r-snorm': {c: 1. s: \"float\", bpp: 8/(4 * 4) f: 'texture-compression-bc'},\n'bc5-rg-unorm': {c: 2. s: \"float\", bpp: 16/(4 * 4) f: 'texture-compression-bc'},\n'bc5-rg-snorm': { },\n'bc6h-rgb-ufloat': {\t16 },\n'bc6h-rgb-float': { },\n'bc7-rgba-unorm': {\t16 },\n'bc7-rgba-unorm-srgb': { },\n\n'etc2-rgb8unorm': {\t8\t\"float\"\t4 × 4\ttexture-compression-etc2 },\n'etc2-rgb8unorm-srgb': { },\n'etc2-rgb8a1unorm': {\t8 },\n'etc2-rgb8a1unorm-srgb': { },\n'etc2-rgba8unorm': {\t16 },\n'etc2-rgba8unorm-srgb': { },\n\n'eac-r11unorm': {\t8 },\n'eac-r11snorm': { },\n'eac-rg11unorm': {\t16 },\n'eac-rg11snorm': { },\n\n'astc-4x4-unorm': {\t16\t\"float\"\t4 × 4\ttexture-compression-astc },\n'astc-4x4-unorm-srgb': { },\n'astc-5x4-unorm': {\t16\t5 × 4 },\n'astc-5x4-unorm-srgb': { },\n'astc-5x5-unorm': {\t16\t5 × 5 },\n'astc-5x5-unorm-srgb': { },\n'astc-6x5-unorm': {\t16\t6 × 5 },\n'astc-6x5-unorm-srgb': { },\n'astc-6x6-unorm': {\t16\t6 × 6 },\n'astc-6x6-unorm-srgb': { },\n'astc-8x5-unorm': {\t16\t8 × 5 },\n'astc-8x5-unorm-srgb': { },\n'astc-8x6-unorm': {\t16\t8 × 6 },\n'astc-8x6-unorm-srgb': { },\n'astc-8x8-unorm': {\t16\t8 × 8 },\n'astc-8x8-unorm-srgb': { },\n'astc-10x5-unorm': {\t16\t10 × 5 },\n'astc-10x5-unorm-srgb': { },\n'astc-10x6-unorm': {\t16\t10 × 6 },\n'astc-10x6-unorm-srgb': { },\n'astc-10x8-unorm': {\t16\t10 × 8 },\n'astc-10x8-unorm-srgb': { },\n'astc-10x10-unorm': {\t16\t10 × 10 },\n'astc-10x10-unorm-srgb': { },\n'astc-12x10-unorm': {\t16\t12 × 10 },\n'astc-12x10-unorm-srgb': { },\n'astc-12x12-unorm': {\t16 },\n*/\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"../init.js\";\nimport { lumaStats } from \"../utils/stats-manager.js\";\nimport { log } from \"../utils/log.js\";\nimport { uid } from \"../utils/utils.js\";\nimport { Buffer } from \"./resources/buffer.js\";\nimport { isTextureFormatCompressed } from \"./type-utils/decode-texture-format.js\";\n/** Limits for a device (max supported sizes of resources, max number of bindings etc) */\nexport class DeviceLimits {\n}\n/** Set-like class for features (lets apps check for WebGL / WebGPU extensions) */\nexport class DeviceFeatures {\n features;\n disabledFeatures;\n constructor(features = [], disabledFeatures) {\n this.features = new Set(features);\n this.disabledFeatures = disabledFeatures || {};\n }\n *[Symbol.iterator]() {\n yield* this.features;\n }\n has(feature) {\n return !this.disabledFeatures[feature] && this.features.has(feature);\n }\n}\n/**\n * WebGPU Device/WebGL context abstraction\n */\nexport class Device {\n static defaultProps = {\n id: null,\n canvas: null,\n container: null,\n manageState: true,\n width: 800, // width are height are only used by headless gl\n height: 600,\n requestMaxLimits: true,\n debug: Boolean(log.get('debug')), // Instrument context (at the expense of performance)\n spector: Boolean(log.get('spector') || log.get('spectorjs')), // Initialize the SpectorJS WebGL debugger\n break: [],\n // TODO - Change these after confirming things work as expected\n initalizeFeatures: true,\n disabledFeatures: {\n 'compilation-status-async-webgl': true\n },\n // alpha: undefined,\n // depth: undefined,\n // stencil: undefined,\n // antialias: undefined,\n // premultipliedAlpha: undefined,\n // preserveDrawingBuffer: undefined,\n // failIfMajorPerformanceCaveat: undefined\n gl: null,\n // Callbacks\n onError: (error) => log.error(error.message)\n };\n get [Symbol.toStringTag]() {\n return 'Device';\n }\n static VERSION = VERSION;\n constructor(props) {\n this.props = { ...Device.defaultProps, ...props };\n this.id = this.props.id || uid(this[Symbol.toStringTag].toLowerCase());\n }\n /** id of this device, primarily for debugging */\n id;\n /** A copy of the device props */\n props;\n /** Available for the application to store data on the device */\n userData = {};\n /** stats */\n statsManager = lumaStats;\n /** Used by other luma.gl modules to store data on the device */\n _lumaData = {};\n /** Check if a specific texture format is GPU compressed */\n isTextureFormatCompressed(format) {\n return isTextureFormatCompressed(format);\n }\n /**\n * Trigger device loss.\n * @returns `true` if context loss could actually be triggered.\n * @note primarily intended for testing how application reacts to device loss\n */\n loseDevice() {\n return false;\n }\n /** Returns the default / primary canvas context. Throws an error if no canvas context is available (a WebGPU compute device) */\n getCanvasContext() {\n if (!this.canvasContext) {\n throw new Error('Device has no CanvasContext');\n }\n return this.canvasContext;\n }\n createTexture(props) {\n // Signature: new Texture2D(gl, url | Promise)\n if (props instanceof Promise || typeof props === 'string') {\n props = { data: props };\n }\n return this._createTexture(props);\n }\n createCommandEncoder(props = {}) {\n throw new Error('not implemented');\n }\n // WebGL specific HACKS - enables app to remove webgl import\n // Use until we have a better way to handle these\n /** @deprecated - will be removed - should use command encoder */\n readPixelsToArrayWebGL(source, options) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use command encoder */\n readPixelsToBufferWebGL(source, options) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use WebGPU parameters (pipeline) */\n setParametersWebGL(parameters) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use WebGPU parameters (pipeline) */\n getParametersWebGL(parameters) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use WebGPU parameters (pipeline) */\n withParametersWebGL(parameters, func) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use clear arguments in RenderPass */\n clearWebGL(options) {\n throw new Error('not implemented');\n }\n /** @deprecated - will be removed - should use for debugging only */\n resetWebGL() {\n throw new Error('not implemented');\n }\n timestamp = 0;\n /** A monotonic counter for tracking buffer and texture updates */\n incrementTimestamp() {\n return this.timestamp++;\n }\n // Error Handling\n /** Report unhandled device errors */\n onError(error) {\n this.props.onError(error);\n }\n // IMPLEMENTATION\n _getBufferProps(props) {\n if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {\n props = { data: props };\n }\n // TODO - fragile, as this is done before we merge with default options\n // inside the Buffer constructor\n const newProps = { ...props };\n // Deduce indexType\n if ((props.usage || 0) & Buffer.INDEX && !props.indexType) {\n if (props.data instanceof Uint32Array) {\n newProps.indexType = 'uint32';\n }\n else if (props.data instanceof Uint16Array) {\n newProps.indexType = 'uint16';\n }\n else {\n log.warn('indices buffer content must be of integer type')();\n }\n }\n return newProps;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Recommendation is to ignore message but current test suite checks agains the\n// message so keep it for now.\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'luma.gl: assertion failed.');\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Device } from \"../adapter/device.js\";\nimport { lumaStats } from \"../utils/stats-manager.js\";\nimport { log } from \"../utils/log.js\";\nimport { assert } from \"../utils/assert.js\";\nconst deviceMap = new Map();\n/**\n * Entry point to the luma.gl GPU abstraction\n * Register WebGPU and/or WebGL devices (controls application bundle size)\n * Run-time selection of the first available Device\n */\nexport class luma {\n static defaultProps = {\n ...Device.defaultProps,\n type: 'best-available',\n devices: undefined\n };\n /** Global stats for all devices */\n static stats = lumaStats;\n /** Global log */\n static log = log;\n static registerDevices(deviceClasses /* : typeof Device */) {\n for (const deviceClass of deviceClasses) {\n assert(deviceClass.type && deviceClass.isSupported && deviceClass.create);\n deviceMap.set(deviceClass.type, deviceClass);\n }\n }\n static getAvailableDevices() {\n // @ts-expect-error\n return Array.from(deviceMap).map(Device => Device.type);\n }\n static getSupportedDevices() {\n return (Array.from(deviceMap)\n // @ts-expect-error\n .filter(Device => Device.isSupported())\n // @ts-expect-error\n .map(Device => Device.type));\n }\n static setDefaultDeviceProps(props) {\n Object.assign(Device.defaultProps, props);\n }\n /** Attach to an existing GPU API handle (WebGL2RenderingContext or GPUDevice). */\n static async attachDevice(props) {\n const devices = getDeviceMap(props.devices) || deviceMap;\n // WebGL\n if (props.handle instanceof WebGL2RenderingContext) {\n const WebGLDevice = devices.get('webgl');\n if (WebGLDevice) {\n return (await WebGLDevice.attach(props.handle));\n }\n }\n // TODO - WebGPU does not yet have a stable API\n // if (props.handle instanceof GPUDevice) {\n // const WebGPUDevice = devices.get('webgpu') as any;\n // if (WebGPUDevice) {\n // return (await WebGPUDevice.attach(props.handle)) as Device;\n // }\n // }\n // null\n if (props.handle === null) {\n const UnknownDevice = devices.get('unknown');\n if (UnknownDevice) {\n return (await UnknownDevice.attach(null));\n }\n }\n throw new Error('Failed to attach device. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.');\n }\n /** Creates a device. Asynchronously. */\n static async createDevice(props = {}) {\n props = { ...luma.defaultProps, ...props };\n if (props.gl) {\n props.type = 'webgl';\n }\n const devices = getDeviceMap(props.devices) || deviceMap;\n switch (props.type) {\n case 'webgpu':\n let WebGPUDevice = devices.get('webgpu');\n if (WebGPUDevice) {\n return await WebGPUDevice.create(props);\n }\n break;\n case 'webgl':\n let WebGLDevice = devices.get('webgl');\n if (WebGLDevice) {\n return await WebGLDevice.create(props);\n }\n break;\n case 'unknown':\n const UnknownDevice = devices.get('unknown');\n if (UnknownDevice) {\n return await UnknownDevice.create(props);\n }\n break;\n case 'best-available':\n WebGPUDevice = devices.get('webgpu');\n if (WebGPUDevice?.isSupported?.()) {\n return await WebGPUDevice.create(props);\n }\n WebGLDevice = devices.get('webgl');\n if (WebGLDevice?.isSupported?.()) {\n return await WebGLDevice.create(props);\n }\n break;\n }\n throw new Error('No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.');\n }\n static enforceWebGL2(enforce = true) {\n const prototype = HTMLCanvasElement.prototype;\n if (!enforce && prototype.originalGetContext) {\n // Reset the original getContext function\n prototype.getContext = prototype.originalGetContext;\n prototype.originalGetContext = undefined;\n return;\n }\n // Store the original getContext function\n prototype.originalGetContext = prototype.getContext;\n // Override the getContext function\n prototype.getContext = function (contextId, options) {\n // Attempt to force WebGL2 for all WebGL1 contexts\n if (contextId === 'webgl' || contextId === 'experimental-webgl') {\n return this.originalGetContext('webgl2', options);\n }\n // For any other type, return the original context\n return this.originalGetContext(contextId, options);\n };\n }\n}\n/** Convert a list of devices to a map */\nfunction getDeviceMap(deviceClasses /* : typeof Device */) {\n if (!deviceClasses || deviceClasses?.length === 0) {\n return null;\n }\n const map = new Map();\n for (const deviceClass of deviceClasses) {\n // assert(deviceClass.type && deviceClass.isSupported && deviceClass.create);\n map.set(deviceClass.type, deviceClass);\n }\n return map;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@probe.gl/env';\nimport { log } from \"../utils/log.js\";\nconst isPage = isBrowser() && typeof document !== 'undefined';\nconst isPageLoaded = () => isPage && document.readyState === 'complete';\nconst DEFAULT_CANVAS_CONTEXT_PROPS = {\n canvas: null,\n width: 800, // width are height are only used by headless gl\n height: 600,\n useDevicePixels: true,\n autoResize: true,\n container: null,\n visible: true,\n colorSpace: 'srgb',\n alphaMode: 'opaque'\n};\n/**\n * Manages a canvas. Supports both HTML or offscreen canvas\n * - Creates a new canvas or looks up a canvas from the DOM\n * - Provides check for DOM loaded\n * @todo commit(): https://github.com/w3ctag/design-reviews/issues/288\n * @todo transferControlToOffscreen: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/transferControlToOffscreen\n */\nexport class CanvasContext {\n id;\n props;\n canvas;\n htmlCanvas;\n offscreenCanvas;\n type;\n width = 1;\n height = 1;\n resizeObserver;\n /** State used by luma.gl classes: TODO - move to canvasContext*/\n _canvasSizeInfo = { clientWidth: 0, clientHeight: 0, devicePixelRatio: 1 };\n /** Check if the DOM is loaded */\n static get isPageLoaded() {\n return isPageLoaded();\n }\n /**\n * Get a 'lazy' promise that resolves when the DOM is loaded.\n * @note Since there may be limitations on number of `load` event listeners,\n * it is recommended avoid calling this function until actually needed.\n * I.e. don't call it until you know that you will be looking up a string in the DOM.\n */\n static pageLoaded = getPageLoadPromise();\n constructor(props) {\n this.props = { ...DEFAULT_CANVAS_CONTEXT_PROPS, ...props };\n props = this.props;\n if (!isBrowser()) {\n this.id = 'node-canvas-context';\n this.type = 'node';\n this.width = this.props.width;\n this.height = this.props.height;\n // TODO - does this prevent app from using jsdom style polyfills?\n this.canvas = null;\n return;\n }\n if (!props.canvas) {\n const canvas = createCanvas(props);\n const container = getContainer(props?.container || null);\n container.insertBefore(canvas, container.firstChild);\n this.canvas = canvas;\n if (!props?.visible) {\n this.canvas.style.visibility = 'hidden';\n }\n }\n else if (typeof props.canvas === 'string') {\n this.canvas = getCanvasFromDOM(props.canvas);\n }\n else {\n this.canvas = props.canvas;\n }\n if (this.canvas instanceof HTMLCanvasElement) {\n this.id = this.canvas.id;\n this.type = 'html-canvas';\n this.htmlCanvas = this.canvas;\n }\n else {\n this.id = 'offscreen-canvas';\n this.type = 'offscreen-canvas';\n this.offscreenCanvas = this.canvas;\n }\n // React to size changes\n if (this.canvas instanceof HTMLCanvasElement && props.autoResize) {\n this.resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === this.canvas) {\n this.update();\n }\n }\n });\n this.resizeObserver.observe(this.canvas);\n }\n }\n /**\n * Returns the current DPR, if props.useDevicePixels is true\n * Device refers to physical\n */\n getDevicePixelRatio(useDevicePixels) {\n if (typeof OffscreenCanvas !== 'undefined' && this.canvas instanceof OffscreenCanvas) {\n return 1;\n }\n useDevicePixels = useDevicePixels === undefined ? this.props.useDevicePixels : useDevicePixels;\n if (!useDevicePixels || useDevicePixels <= 0) {\n return 1;\n }\n // The param was mainly provide to support the test cases, could be removed\n if (useDevicePixels === true) {\n const dpr = typeof window !== 'undefined' && window.devicePixelRatio;\n return dpr || 1;\n }\n return useDevicePixels;\n }\n /**\n * Returns the size of drawing buffer in device pixels.\n * @note This can be different from the 'CSS' size of a canvas, and also from the\n * canvas' internal drawing buffer size (.width, .height).\n * This is the size required to cover the canvas, adjusted for DPR\n */\n getPixelSize() {\n switch (this.type) {\n case 'node':\n return [this.width, this.height];\n case 'offscreen-canvas':\n return [this.canvas.width, this.canvas.height];\n case 'html-canvas':\n const dpr = this.getDevicePixelRatio();\n const canvas = this.canvas;\n // If not attached to DOM client size can be 0\n return canvas.parentElement\n ? [canvas.clientWidth * dpr, canvas.clientHeight * dpr]\n : [this.canvas.width, this.canvas.height];\n default:\n throw new Error(this.type);\n }\n }\n getAspect() {\n const [width, height] = this.getPixelSize();\n return width / height;\n }\n /**\n * Returns multiplier need to convert CSS size to Device size\n */\n cssToDeviceRatio() {\n try {\n // For headless gl we might have used custom width and height\n // hence use cached clientWidth\n const [drawingBufferWidth] = this.getDrawingBufferSize();\n const { clientWidth } = this._canvasSizeInfo;\n return clientWidth ? drawingBufferWidth / clientWidth : 1;\n }\n catch {\n return 1;\n }\n }\n /**\n * Maps CSS pixel position to device pixel position\n */\n cssToDevicePixels(cssPixel, yInvert = true) {\n const ratio = this.cssToDeviceRatio();\n const [width, height] = this.getDrawingBufferSize();\n return scalePixels(cssPixel, ratio, width, height, yInvert);\n }\n /**\n * Use devicePixelRatio to set canvas width and height\n * @note this is a raw port of luma.gl v8 code. Might be worth a review\n */\n setDevicePixelRatio(devicePixelRatio, options = {}) {\n if (!this.htmlCanvas) {\n return;\n }\n // NOTE: if options.width and options.height not used remove in v8\n let clientWidth = 'width' in options ? options.width : this.htmlCanvas.clientWidth;\n let clientHeight = 'height' in options ? options.height : this.htmlCanvas.clientHeight;\n if (!clientWidth || !clientHeight) {\n log.log(1, 'Canvas clientWidth/clientHeight is 0')();\n // by forcing devicePixel ratio to 1, we do not scale canvas.width and height in each frame.\n devicePixelRatio = 1;\n clientWidth = this.htmlCanvas.width || 1;\n clientHeight = this.htmlCanvas.height || 1;\n }\n const cachedSize = this._canvasSizeInfo;\n // Check if canvas needs to be resized\n if (cachedSize.clientWidth !== clientWidth ||\n cachedSize.clientHeight !== clientHeight ||\n cachedSize.devicePixelRatio !== devicePixelRatio) {\n let clampedPixelRatio = devicePixelRatio;\n const canvasWidth = Math.floor(clientWidth * clampedPixelRatio);\n const canvasHeight = Math.floor(clientHeight * clampedPixelRatio);\n this.htmlCanvas.width = canvasWidth;\n this.htmlCanvas.height = canvasHeight;\n // Note: when devicePixelRatio is too high, it is possible we might hit system limit for\n // drawing buffer width and hight, in those cases they get clamped and resulting aspect ration may not be maintained\n // for those cases, reduce devicePixelRatio.\n const [drawingBufferWidth, drawingBufferHeight] = this.getDrawingBufferSize();\n if (drawingBufferWidth !== canvasWidth || drawingBufferHeight !== canvasHeight) {\n clampedPixelRatio = Math.min(drawingBufferWidth / clientWidth, drawingBufferHeight / clientHeight);\n this.htmlCanvas.width = Math.floor(clientWidth * clampedPixelRatio);\n this.htmlCanvas.height = Math.floor(clientHeight * clampedPixelRatio);\n log.warn('Device pixel ratio clamped')();\n }\n this._canvasSizeInfo.clientWidth = clientWidth;\n this._canvasSizeInfo.clientHeight = clientHeight;\n this._canvasSizeInfo.devicePixelRatio = devicePixelRatio;\n }\n }\n // PRIVATE\n /** @todo Major hack done to port the CSS methods above, base canvas context should not depend on WebGL */\n getDrawingBufferSize() {\n // @ts-expect-error This only works for WebGL\n const gl = this.device.gl;\n if (!gl) {\n // use default device pixel ratio\n throw new Error('canvas size');\n }\n return [gl.drawingBufferWidth, gl.drawingBufferHeight];\n }\n /**\n * Allows subclass constructor to override the canvas id for auto created canvases.\n * This can really help when debugging DOM in apps that create multiple devices\n */\n _setAutoCreatedCanvasId(id) {\n if (this.htmlCanvas?.id === 'lumagl-auto-created-canvas') {\n this.htmlCanvas.id = id;\n }\n }\n}\n// HELPER FUNCTIONS\n/** Returns a promise that resolves when the page is loaded */\nfunction getPageLoadPromise() {\n if (isPageLoaded() || typeof window === 'undefined') {\n return Promise.resolve();\n }\n return new Promise(resolve => {\n window.addEventListener('load', () => resolve());\n });\n}\nfunction getContainer(container) {\n if (typeof container === 'string') {\n const element = document.getElementById(container);\n if (!element && !isPageLoaded()) {\n throw new Error(`Accessing '${container}' before page was loaded`);\n }\n if (!element) {\n throw new Error(`${container} is not an HTML element`);\n }\n return element;\n }\n else if (container) {\n return container;\n }\n return document.body;\n}\n/** Get a Canvas element from DOM id */\nfunction getCanvasFromDOM(canvasId) {\n const canvas = document.getElementById(canvasId);\n if (!canvas && !isPageLoaded()) {\n throw new Error(`Accessing '${canvasId}' before page was loaded`);\n }\n if (!(canvas instanceof HTMLCanvasElement)) {\n throw new Error('Object is not a canvas element');\n }\n return canvas;\n}\n/** Create a new canvas */\nfunction createCanvas(props) {\n const { width, height } = props;\n const targetCanvas = document.createElement('canvas');\n targetCanvas.id = 'lumagl-auto-created-canvas';\n targetCanvas.width = width || 1;\n targetCanvas.height = height || 1;\n targetCanvas.style.width = Number.isFinite(width) ? `${width}px` : '100%';\n targetCanvas.style.height = Number.isFinite(height) ? `${height}px` : '100%';\n return targetCanvas;\n}\n/**\n *\n * @param pixel\n * @param ratio\n * @param width\n * @param height\n * @param yInvert\n * @returns\n */\nfunction scalePixels(pixel, ratio, width, height, yInvert) {\n const point = pixel;\n const x = scaleX(point[0], ratio, width);\n let y = scaleY(point[1], ratio, height, yInvert);\n // Find boundaries of next pixel to provide valid range of device pixel locations\n let t = scaleX(point[0] + 1, ratio, width);\n // If next pixel's position is clamped to boundary, use it as is, otherwise subtract 1 for current pixel boundary\n const xHigh = t === width - 1 ? t : t - 1;\n t = scaleY(point[1] + 1, ratio, height, yInvert);\n let yHigh;\n if (yInvert) {\n // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range\n t = t === 0 ? t : t + 1;\n // swap y and yHigh\n yHigh = y;\n y = t;\n }\n else {\n // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range\n yHigh = t === height - 1 ? t : t - 1;\n // y remains same\n }\n return {\n x,\n y,\n // when ratio < 1, current css pixel and next css pixel may point to same device pixel, set width/height to 1 in those cases.\n width: Math.max(xHigh - x + 1, 1),\n height: Math.max(yHigh - y + 1, 1)\n };\n}\nfunction scaleX(x, ratio, width) {\n // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit\n const r = Math.min(Math.round(x * ratio), width - 1);\n return r;\n}\nfunction scaleY(y, ratio, height, yInvert) {\n // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit\n return yInvert\n ? Math.max(0, height - 1 - Math.round(y * ratio))\n : Math.min(Math.round(y * ratio), height - 1);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Tables describing WebGL parameters\nimport { GL } from '@luma.gl/constants';\n// DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS\n/* eslint-disable no-shadow */\nexport const GL_PARAMETER_DEFAULTS = {\n [3042]: false,\n [32773]: new Float32Array([0, 0, 0, 0]),\n [32777]: 32774,\n [34877]: 32774,\n [32969]: 1,\n [32968]: 0,\n [32971]: 1,\n [32970]: 0,\n [3106]: new Float32Array([0, 0, 0, 0]), // TBD\n [3107]: [true, true, true, true],\n [2884]: false,\n [2885]: 1029,\n [2929]: false,\n [2931]: 1,\n [2932]: 513,\n [2928]: new Float32Array([0, 1]), // TBD\n [2930]: true,\n [3024]: true,\n [35725]: null,\n // FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.\n [36006]: null,\n [36007]: null,\n [34229]: null,\n [34964]: null,\n [2886]: 2305,\n [33170]: 4352,\n [2849]: 1,\n [32823]: false,\n [32824]: 0,\n [10752]: 0,\n [32926]: false,\n [32928]: false,\n [32938]: 1.0,\n [32939]: false,\n [3089]: false,\n // Note: Dynamic value. If scissor test enabled we expect users to set correct scissor box\n [3088]: new Int32Array([0, 0, 1024, 1024]),\n [2960]: false,\n [2961]: 0,\n [2968]: 0xffffffff,\n [36005]: 0xffffffff,\n [2962]: 519,\n [2967]: 0,\n [2963]: 0xffffffff,\n [34816]: 519,\n [36003]: 0,\n [36004]: 0xffffffff,\n [2964]: 7680,\n [2965]: 7680,\n [2966]: 7680,\n [34817]: 7680,\n [34818]: 7680,\n [34819]: 7680,\n // Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.\n [2978]: [0, 0, 1024, 1024],\n [36389]: null,\n [36662]: null,\n [36663]: null,\n [35053]: null,\n [35055]: null,\n [35723]: 4352,\n [36010]: null,\n [35977]: false,\n [3333]: 4,\n [3317]: 4,\n [37440]: false,\n [37441]: false,\n [37443]: 37444,\n [3330]: 0,\n [3332]: 0,\n [3331]: 0,\n [3314]: 0,\n [32878]: 0,\n [3316]: 0,\n [3315]: 0,\n [32877]: 0\n};\n// SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API\nconst enable = (gl, value, key) => value ? gl.enable(key) : gl.disable(key);\nconst hint = (gl, value, key) => gl.hint(key, value);\nconst pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);\nconst bindFramebuffer = (gl, value, key) => {\n const target = key === 36006 ? 36009 : 36008;\n return gl.bindFramebuffer(target, value);\n};\nconst bindBuffer = (gl, value, key) => {\n const bindingMap = {\n [34964]: 34962,\n [36662]: 36662,\n [36663]: 36663,\n [35053]: 35051,\n [35055]: 35052\n };\n const glTarget = bindingMap[key];\n gl.bindBuffer(glTarget, value);\n};\n// Utility\nfunction isArray(array) {\n return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));\n}\n// Map from WebGL parameter names to corresponding WebGL setter functions\n// WegGL constants are read by parameter names, but set by function names\n// NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'\nexport const GL_PARAMETER_SETTERS = {\n [3042]: enable,\n [32773]: (gl, value) => gl.blendColor(...value),\n [32777]: 'blendEquation',\n [34877]: 'blendEquation',\n [32969]: 'blendFunc',\n [32968]: 'blendFunc',\n [32971]: 'blendFunc',\n [32970]: 'blendFunc',\n [3106]: (gl, value) => gl.clearColor(...value),\n [3107]: (gl, value) => gl.colorMask(...value),\n [2884]: enable,\n [2885]: (gl, value) => gl.cullFace(value),\n [2929]: enable,\n [2931]: (gl, value) => gl.clearDepth(value),\n [2932]: (gl, value) => gl.depthFunc(value),\n [2928]: (gl, value) => gl.depthRange(...value),\n [2930]: (gl, value) => gl.depthMask(value),\n [3024]: enable,\n [35723]: hint,\n [35725]: (gl, value) => gl.useProgram(value),\n [36007]: (gl, value) => gl.bindRenderbuffer(36161, value),\n [36389]: (gl, value) => gl.bindTransformFeedback?.(36386, value),\n [34229]: (gl, value) => gl.bindVertexArray(value),\n // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.\n [36006]: bindFramebuffer,\n [36010]: bindFramebuffer,\n // Buffers\n [34964]: bindBuffer,\n [36662]: bindBuffer,\n [36663]: bindBuffer,\n [35053]: bindBuffer,\n [35055]: bindBuffer,\n [2886]: (gl, value) => gl.frontFace(value),\n [33170]: hint,\n [2849]: (gl, value) => gl.lineWidth(value),\n [32823]: enable,\n [32824]: 'polygonOffset',\n [10752]: 'polygonOffset',\n [35977]: enable,\n [32926]: enable,\n [32928]: enable,\n [32938]: 'sampleCoverage',\n [32939]: 'sampleCoverage',\n [3089]: enable,\n [3088]: (gl, value) => gl.scissor(...value),\n [2960]: enable,\n [2961]: (gl, value) => gl.clearStencil(value),\n [2968]: (gl, value) => gl.stencilMaskSeparate(1028, value),\n [36005]: (gl, value) => gl.stencilMaskSeparate(1029, value),\n [2962]: 'stencilFuncFront',\n [2967]: 'stencilFuncFront',\n [2963]: 'stencilFuncFront',\n [34816]: 'stencilFuncBack',\n [36003]: 'stencilFuncBack',\n [36004]: 'stencilFuncBack',\n [2964]: 'stencilOpFront',\n [2965]: 'stencilOpFront',\n [2966]: 'stencilOpFront',\n [34817]: 'stencilOpBack',\n [34818]: 'stencilOpBack',\n [34819]: 'stencilOpBack',\n [2978]: (gl, value) => gl.viewport(...value),\n // WEBGL2 EXTENSIONS\n // EXT_depth_clamp https://registry.khronos.org/webgl/extensions/EXT_depth_clamp/\n [34383]: enable,\n // WEBGL_provoking_vertex https://registry.khronos.org/webgl/extensions/WEBGL_provoking_vertex/\n // [GL.PROVOKING_VERTEX_WEBL]: TODO - extension function needed\n // WEBGL_polygon_mode https://registry.khronos.org/webgl/extensions/WEBGL_polygon_mode/\n // POLYGON_MODE_WEBGL TODO - extension function needed\n [10754]: enable,\n // WEBGL_clip_cull_distance https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/\n [12288]: enable,\n [12289]: enable,\n [12290]: enable,\n [12291]: enable,\n [12292]: enable,\n [12293]: enable,\n [12294]: enable,\n [12295]: enable,\n // PIXEL PACK/UNPACK MODES\n [3333]: pixelStorei,\n [3317]: pixelStorei,\n [37440]: pixelStorei,\n [37441]: pixelStorei,\n [37443]: pixelStorei,\n [3330]: pixelStorei,\n [3332]: pixelStorei,\n [3331]: pixelStorei,\n [3314]: pixelStorei,\n [32878]: pixelStorei,\n [3316]: pixelStorei,\n [3315]: pixelStorei,\n [32877]: pixelStorei,\n // Function-style setters\n framebuffer: (gl, framebuffer) => {\n // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class\n // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.\n const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;\n return gl.bindFramebuffer(36160, handle);\n },\n blend: (gl, value) => value ? gl.enable(3042) : gl.disable(3042),\n blendColor: (gl, value) => gl.blendColor(...value),\n blendEquation: (gl, args) => {\n const separateModes = typeof args === 'number' ? [args, args] : args;\n gl.blendEquationSeparate(...separateModes);\n },\n blendFunc: (gl, args) => {\n const separateFuncs = args?.length === 2 ? [...args, ...args] : args;\n gl.blendFuncSeparate(...separateFuncs);\n },\n clearColor: (gl, value) => gl.clearColor(...value),\n clearDepth: (gl, value) => gl.clearDepth(value),\n clearStencil: (gl, value) => gl.clearStencil(value),\n colorMask: (gl, value) => gl.colorMask(...value),\n cull: (gl, value) => value ? gl.enable(2884) : gl.disable(2884),\n cullFace: (gl, value) => gl.cullFace(value),\n depthTest: (gl, value) => value ? gl.enable(2929) : gl.disable(2929),\n depthFunc: (gl, value) => gl.depthFunc(value),\n depthMask: (gl, value) => gl.depthMask(value),\n depthRange: (gl, value) => gl.depthRange(...value),\n dither: (gl, value) => value ? gl.enable(3024) : gl.disable(3024),\n derivativeHint: (gl, value) => {\n // gl1: 'OES_standard_derivatives'\n gl.hint(35723, value);\n },\n frontFace: (gl, value) => gl.frontFace(value),\n mipmapHint: (gl, value) => gl.hint(33170, value),\n lineWidth: (gl, value) => gl.lineWidth(value),\n polygonOffsetFill: (gl, value) => value ? gl.enable(32823) : gl.disable(32823),\n polygonOffset: (gl, value) => gl.polygonOffset(...value),\n sampleCoverage: (gl, value) => gl.sampleCoverage(...value),\n scissorTest: (gl, value) => value ? gl.enable(3089) : gl.disable(3089),\n scissor: (gl, value) => gl.scissor(...value),\n stencilTest: (gl, value) => value ? gl.enable(2960) : gl.disable(2960),\n stencilMask: (gl, value) => {\n value = isArray(value) ? value : [value, value];\n const [mask, backMask] = value;\n gl.stencilMaskSeparate(1028, mask);\n gl.stencilMaskSeparate(1029, backMask);\n },\n stencilFunc: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [func, ref, mask, backFunc, backRef, backMask] = args;\n gl.stencilFuncSeparate(1028, func, ref, mask);\n gl.stencilFuncSeparate(1029, backFunc, backRef, backMask);\n },\n stencilOp: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;\n gl.stencilOpSeparate(1028, sfail, dpfail, dppass);\n gl.stencilOpSeparate(1029, backSfail, backDpfail, backDppass);\n },\n viewport: (gl, value) => gl.viewport(...value)\n};\nfunction getValue(glEnum, values, cache) {\n return values[glEnum] !== undefined ? values[glEnum] : cache[glEnum];\n}\n// COMPOSITE_WEBGL_PARAMETER_\nexport const GL_COMPOSITE_PARAMETER_SETTERS = {\n blendEquation: (gl, values, cache) => gl.blendEquationSeparate(getValue(32777, values, cache), getValue(34877, values, cache)),\n blendFunc: (gl, values, cache) => gl.blendFuncSeparate(getValue(32969, values, cache), getValue(32968, values, cache), getValue(32971, values, cache), getValue(32970, values, cache)),\n polygonOffset: (gl, values, cache) => gl.polygonOffset(getValue(32824, values, cache), getValue(10752, values, cache)),\n sampleCoverage: (gl, values, cache) => gl.sampleCoverage(getValue(32938, values, cache), getValue(32939, values, cache)),\n stencilFuncFront: (gl, values, cache) => gl.stencilFuncSeparate(1028, getValue(2962, values, cache), getValue(2967, values, cache), getValue(2963, values, cache)),\n stencilFuncBack: (gl, values, cache) => gl.stencilFuncSeparate(1029, getValue(34816, values, cache), getValue(36003, values, cache), getValue(36004, values, cache)),\n stencilOpFront: (gl, values, cache) => gl.stencilOpSeparate(1028, getValue(2964, values, cache), getValue(2965, values, cache), getValue(2966, values, cache)),\n stencilOpBack: (gl, values, cache) => gl.stencilOpSeparate(1029, getValue(34817, values, cache), getValue(34818, values, cache), getValue(34819, values, cache))\n};\n// Setter functions intercepted for cache updates\nexport const GL_HOOKED_SETTERS = {\n // GENERIC SETTERS\n enable: (update, capability) => update({\n [capability]: true\n }),\n disable: (update, capability) => update({\n [capability]: false\n }),\n pixelStorei: (update, pname, value) => update({\n [pname]: value\n }),\n hint: (update, pname, hint) => update({\n [pname]: hint\n }),\n // SPECIFIC SETTERS\n useProgram: (update, value) => update({\n [35725]: value\n }),\n bindRenderbuffer: (update, target, value) => update({\n [36007]: value\n }),\n bindTransformFeedback: (update, target, value) => update({\n [36389]: value\n }),\n bindVertexArray: (update, value) => update({\n [34229]: value\n }),\n bindFramebuffer: (update, target, framebuffer) => {\n switch (target) {\n case 36160:\n return update({\n [36006]: framebuffer,\n [36010]: framebuffer\n });\n case 36009:\n return update({ [36006]: framebuffer });\n case 36008:\n return update({ [36010]: framebuffer });\n default:\n return null;\n }\n },\n bindBuffer: (update, target, buffer) => {\n const pname = {\n [34962]: [34964],\n [36662]: [36662],\n [36663]: [36663],\n [35051]: [35053],\n [35052]: [35055]\n }[target];\n if (pname) {\n return update({ [pname]: buffer });\n }\n // targets that should not be cached\n return { valueChanged: true };\n },\n blendColor: (update, r, g, b, a) => update({\n [32773]: new Float32Array([r, g, b, a])\n }),\n blendEquation: (update, mode) => update({\n [32777]: mode,\n [34877]: mode\n }),\n blendEquationSeparate: (update, modeRGB, modeAlpha) => update({\n [32777]: modeRGB,\n [34877]: modeAlpha\n }),\n blendFunc: (update, src, dst) => update({\n [32969]: src,\n [32968]: dst,\n [32971]: src,\n [32970]: dst\n }),\n blendFuncSeparate: (update, srcRGB, dstRGB, srcAlpha, dstAlpha) => update({\n [32969]: srcRGB,\n [32968]: dstRGB,\n [32971]: srcAlpha,\n [32970]: dstAlpha\n }),\n clearColor: (update, r, g, b, a) => update({\n [3106]: new Float32Array([r, g, b, a])\n }),\n clearDepth: (update, depth) => update({\n [2931]: depth\n }),\n clearStencil: (update, s) => update({\n [2961]: s\n }),\n colorMask: (update, r, g, b, a) => update({\n [3107]: [r, g, b, a]\n }),\n cullFace: (update, mode) => update({\n [2885]: mode\n }),\n depthFunc: (update, func) => update({\n [2932]: func\n }),\n depthRange: (update, zNear, zFar) => update({\n [2928]: new Float32Array([zNear, zFar])\n }),\n depthMask: (update, mask) => update({\n [2930]: mask\n }),\n frontFace: (update, face) => update({\n [2886]: face\n }),\n lineWidth: (update, width) => update({\n [2849]: width\n }),\n polygonOffset: (update, factor, units) => update({\n [32824]: factor,\n [10752]: units\n }),\n sampleCoverage: (update, value, invert) => update({\n [32938]: value,\n [32939]: invert\n }),\n scissor: (update, x, y, width, height) => update({\n [3088]: new Int32Array([x, y, width, height])\n }),\n stencilMask: (update, mask) => update({\n [2968]: mask,\n [36005]: mask\n }),\n stencilMaskSeparate: (update, face, mask) => update({\n [face === 1028 ? 2968 : 36005]: mask\n }),\n stencilFunc: (update, func, ref, mask) => update({\n [2962]: func,\n [2967]: ref,\n [2963]: mask,\n [34816]: func,\n [36003]: ref,\n [36004]: mask\n }),\n stencilFuncSeparate: (update, face, func, ref, mask) => update({\n [face === 1028 ? 2962 : 34816]: func,\n [face === 1028 ? 2967 : 36003]: ref,\n [face === 1028 ? 2963 : 36004]: mask\n }),\n stencilOp: (update, fail, zfail, zpass) => update({\n [2964]: fail,\n [2965]: zfail,\n [2966]: zpass,\n [34817]: fail,\n [34818]: zfail,\n [34819]: zpass\n }),\n stencilOpSeparate: (update, face, fail, zfail, zpass) => update({\n [face === 1028 ? 2964 : 34817]: fail,\n [face === 1028 ? 2965 : 34818]: zfail,\n [face === 1028 ? 2966 : 34819]: zpass\n }),\n viewport: (update, x, y, width, height) => update({\n [2978]: [x, y, width, height]\n })\n};\n// GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT\nconst isEnabled = (gl, key) => gl.isEnabled(key);\n// Exceptions for any keys that cannot be queried by gl.getParameters\nexport const GL_PARAMETER_GETTERS = {\n [3042]: isEnabled,\n [2884]: isEnabled,\n [2929]: isEnabled,\n [3024]: isEnabled,\n [32823]: isEnabled,\n [32926]: isEnabled,\n [32928]: isEnabled,\n [3089]: isEnabled,\n [2960]: isEnabled,\n [35977]: isEnabled\n};\nexport const NON_CACHE_PARAMETERS = new Set([\n 34016,\n 36388,\n 36387,\n 35983,\n 35368,\n 34965,\n 35739,\n 35738,\n 3074,\n 34853,\n 34854,\n 34855,\n 34856,\n 34857,\n 34858,\n 34859,\n 34860,\n 34861,\n 34862,\n 34863,\n 34864,\n 34865,\n 34866,\n 34867,\n 34868,\n 35097,\n 32873,\n 35869,\n 32874,\n 34068\n]);\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_PARAMETER_DEFAULTS, GL_PARAMETER_SETTERS, GL_COMPOSITE_PARAMETER_SETTERS, GL_PARAMETER_GETTERS } from \"./webgl-parameter-tables.js\";\n/**\n * Sets any GL parameter regardless of function (gl.blendMode, ...)\n *\n * @note requires a `cache` object to be set on the context (gl.state.cache)\n * This object is used to fill in any missing values for composite setter functions\n */\nexport function setGLParameters(gl, parameters) {\n if (isObjectEmpty(parameters)) {\n return;\n }\n const compositeSetters = {};\n // HANDLE PRIMITIVE SETTERS (and make note of any composite setters)\n for (const key in parameters) {\n const glConstant = Number(key);\n const setter = GL_PARAMETER_SETTERS[key];\n if (setter) {\n // Composite setters should only be called once, so save them\n if (typeof setter === 'string') {\n compositeSetters[setter] = true;\n }\n else {\n // if (gl[glConstant] !== undefined) {\n // TODO - added above check since this is being called on WebGL2 parameters in WebGL1...\n // TODO - deep equal on values? only call setter if value has changed?\n // NOTE - the setter will automatically update this.state\n setter(gl, parameters[key], glConstant);\n }\n }\n }\n // HANDLE COMPOSITE SETTERS\n // NOTE: any non-provided values needed by composite setters are filled in from state cache\n // The cache parameter is automatically retrieved from the context\n // This depends on `trackContextState`, which is technically a \"circular\" dependency.\n // But it is too inconvenient to always require a cache parameter here.\n // This is the ONLY external dependency in this module/\n // @ts-expect-error\n const cache = gl.state && gl.state.cache;\n if (cache) {\n for (const key in compositeSetters) {\n // TODO - avoid calling composite setters if values have not changed.\n const compositeSetter = GL_COMPOSITE_PARAMETER_SETTERS[key];\n // Note - if `trackContextState` has been called,\n // the setter will automatically update this.state.cache\n compositeSetter(gl, parameters, cache);\n }\n }\n // Add a log for the else case?\n}\n/**\n * Reads the entire WebGL state from a context\n\n // default to querying all parameters\n\n * @returns - a newly created map, with values keyed by GL parameters\n *\n * @note Copies the state from a context (gl.getParameter should not be overriden)\n * Reads the entire WebGL state from a context\n *\n * @note This can generates a huge amount of synchronous driver roundtrips and should be\n * considered a very slow operation, to be used only if/when a context already manipulated\n * by external code needs to be synchronized for the first time\n */\nexport function getGLParameters(gl, parameters = GL_PARAMETER_DEFAULTS) {\n // support both arrays of parameters and objects (keys represent parameters)\n if (typeof parameters === 'number') {\n // single GL enum\n const key = parameters;\n const getter = GL_PARAMETER_GETTERS[key];\n return getter ? getter(gl, key) : gl.getParameter(key);\n }\n const parameterKeys = Array.isArray(parameters) ? parameters : Object.keys(parameters);\n const state = {};\n for (const key of parameterKeys) {\n const getter = GL_PARAMETER_GETTERS[key];\n state[key] = getter ? getter(gl, Number(key)) : gl.getParameter(Number(key));\n }\n return state;\n}\n/**\n * Reset all parameters to a (almost) pure context state\n * @note viewport and scissor will be set to the values in GL_PARAMETER_DEFAULTS,\n * NOT the canvas size dimensions, so they will have to be properly set after\n * calling this function.\n */\nexport function resetGLParameters(gl) {\n setGLParameters(gl, GL_PARAMETER_DEFAULTS);\n}\n// Helpers\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(object) {\n // @ts-ignore dummy key variable\n for (const key in object) {\n return false;\n }\n return true;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** deeply compare two arrays */\nexport function deepArrayEqual(x, y) {\n if (x === y) {\n return true;\n }\n const isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);\n const isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);\n // @ts-expect-error TODO fix\n if (isArrayX && isArrayY && x.length === y.length) {\n // @ts-expect-error TODO fix\n for (let i = 0; i < x.length; ++i) {\n if (x[i] !== y[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Support for listening to context state changes and intercepting state queries\n// NOTE: this system does not handle buffer bindings\nimport { assert } from '@luma.gl/core';\nimport { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from \"../parameters/webgl-parameter-tables.js\";\nimport { setGLParameters, getGLParameters } from \"../parameters/unified-parameter-api.js\";\nimport { deepArrayEqual } from \"./deep-array-equal.js\";\n// HELPER CLASS - GLState\n/* eslint-disable no-shadow */\nclass GLState {\n gl;\n program = null;\n stateStack = [];\n enable = true;\n cache;\n log;\n constructor(gl, { copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)\n log = () => { } // Logging function, called when gl parameter change calls are actually issued\n } = {}) {\n this.gl = gl;\n this.cache = copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);\n this.log = log;\n this._updateCache = this._updateCache.bind(this);\n Object.seal(this);\n }\n push(values = {}) {\n this.stateStack.push({});\n }\n pop() {\n assert(this.stateStack.length > 0);\n // Use the saved values in the state stack to restore parameters\n const oldValues = this.stateStack[this.stateStack.length - 1];\n setGLParameters(this.gl, oldValues);\n // Don't pop until we have reset parameters (to make sure other \"stack frames\" are not affected)\n this.stateStack.pop();\n }\n /**\n // interceptor for context set functions - update our cache and our stack\n // values (Object) - the key values for this setter\n * @param values\n * @returns\n */\n _updateCache(values) {\n let valueChanged = false;\n let oldValue; // = undefined\n const oldValues = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;\n for (const key in values) {\n assert(key !== undefined);\n const value = values[key];\n const cached = this.cache[key];\n // Check that value hasn't already been shadowed\n if (!deepArrayEqual(value, cached)) {\n valueChanged = true;\n oldValue = cached;\n // First, save current value being shadowed\n // If a state stack frame is active, save the current parameter values for pop\n // but first check that value hasn't already been shadowed and saved\n if (oldValues && !(key in oldValues)) {\n oldValues[key] = cached;\n }\n // Save current value being shadowed\n this.cache[key] = value;\n }\n }\n return { valueChanged, oldValue };\n }\n}\nfunction getContextState(gl) {\n // @ts-expect-error\n return gl.state;\n}\n// PUBLIC API\n/**\n * Initialize WebGL state caching on a context\n * can be called multiple times to enable/disable\n *\n * @note After calling this function, context state will be cached\n * gl.state.push() and gl.state.pop() will be available for saving,\n * temporarily modifying, and then restoring state.\n */\nexport function trackContextState(gl, options) {\n const { enable = true, copyState } = options;\n assert(copyState !== undefined);\n // @ts-expect-error\n if (!gl.state) {\n // @ts-ignore\n // const {polyfillContext} = global_;\n // if (polyfillContext) {\n // polyfillContext(gl);\n // }\n // Create a state cache\n // @ts-expect-error\n gl.state = new GLState(gl, { copyState });\n installProgramSpy(gl);\n // intercept all setter functions in the table\n for (const key in GL_HOOKED_SETTERS) {\n const setter = GL_HOOKED_SETTERS[key];\n installSetterSpy(gl, key, setter);\n }\n // intercept all getter functions in the table\n installGetterOverride(gl, 'getParameter');\n installGetterOverride(gl, 'isEnabled');\n }\n const glState = getContextState(gl);\n glState.enable = enable;\n return gl;\n}\n/**\n * Saves current WebGL context state onto an internal per-context stack\n */\nexport function pushContextState(gl) {\n let glState = getContextState(gl);\n if (!glState) {\n trackContextState(gl, { copyState: false });\n glState = getContextState(gl);\n }\n glState.push();\n}\n/**\n * Restores previously saved WebGL context state\n */\nexport function popContextState(gl) {\n const glState = getContextState(gl);\n assert(glState);\n glState.pop();\n}\n// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT\n/**\n// Overrides a WebGL2RenderingContext state \"getter\" function\n// to return values directly from cache\n * @param gl\n * @param functionName\n */\nfunction installGetterOverride(gl, functionName) {\n // Get the original function from the WebGL2RenderingContext\n const originalGetterFunc = gl[functionName].bind(gl);\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function get(pname) {\n if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {\n // Invalid or blacklisted parameter, do not cache\n return originalGetterFunc(pname);\n }\n const glState = getContextState(gl);\n if (!(pname in glState.cache)) {\n // WebGL limits are not prepopulated in the cache, call the original getter when first queried.\n glState.cache[pname] = originalGetterFunc(pname);\n }\n // Optionally call the original function to do a \"hard\" query from the WebGL2RenderingContext\n return glState.enable\n ? // Call the getter the params so that it can e.g. serve from a cache\n glState.cache[pname]\n : // Optionally call the original function to do a \"hard\" query from the WebGL2RenderingContext\n originalGetterFunc(pname);\n };\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-from-cache`,\n configurable: false\n });\n}\n/**\n// Overrides a WebGL2RenderingContext state \"setter\" function\n// to call a setter spy before the actual setter. Allows us to keep a cache\n// updated with a copy of the WebGL context state.\n * @param gl\n * @param functionName\n * @param setter\n * @returns\n */\nfunction installSetterSpy(gl, functionName, setter) {\n // Get the original function from the WebGL2RenderingContext\n if (!gl[functionName]) {\n // TODO - remove?\n // This could happen if we try to intercept WebGL2 method on a WebGL1 context\n return;\n }\n const originalSetterFunc = gl[functionName].bind(gl);\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function set(...params) {\n // Update the value\n // Call the setter with the state cache and the params so that it can store the parameters\n const glState = getContextState(gl);\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { valueChanged, oldValue } = setter(glState._updateCache, ...params);\n // Call the original WebGL2RenderingContext func to make sure the context actually gets updated\n if (valueChanged) {\n originalSetterFunc(...params);\n }\n // Note: if the original function fails to set the value, our state cache will be bad\n // No solution for this at the moment, but assuming that this is unlikely to be a real problem\n // We could call the setter after the originalSetterFunc. Concern is that this would\n // cause different behavior in debug mode, where originalSetterFunc can throw exceptions\n return oldValue;\n };\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-to-cache`,\n configurable: false\n });\n}\nfunction installProgramSpy(gl) {\n const originalUseProgram = gl.useProgram.bind(gl);\n gl.useProgram = function useProgramLuma(handle) {\n const glState = getContextState(gl);\n if (glState.program !== handle) {\n originalUseProgram(handle);\n glState.program = handle;\n }\n };\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_CONTEXT_PROPS = {\n powerPreference: 'high-performance', // After all, most apps are using WebGL for performance reasons\n // eslint-disable-next-line no-console\n onContextLost: () => console.error('WebGL context lost'),\n // eslint-disable-next-line no-console\n onContextRestored: () => console.info('WebGL context restored')\n};\n/**\n * Create a WebGL context for a canvas\n * Note calling this multiple time on the same canvas does return the same context\n * @param canvas A canvas element or offscreen canvas\n */\nexport function createBrowserContext(canvas, props) {\n props = { ...DEFAULT_CONTEXT_PROPS, ...props };\n // Try to extract any extra information about why context creation failed\n let errorMessage = null;\n const onCreateError = error => (errorMessage = error.statusMessage || errorMessage);\n canvas.addEventListener('webglcontextcreationerror', onCreateError, false);\n // Create the desired context\n let gl = null;\n // props.failIfMajorPerformanceCaveat = true;\n // We require webgl2 context\n gl ||= canvas.getContext('webgl2', props);\n // Software GPU\n // props.failIfMajorPerformanceCaveat = false;\n // if (!gl && props.webgl1) {\n // gl = canvas.getContext('webgl', props);\n // }\n // TODO are we removing this listener before giving it a chance to fire?\n canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);\n if (!gl) {\n throw new Error(`Failed to create WebGL context: ${errorMessage || 'Unknown error'}`);\n }\n if (props.onContextLost) {\n // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.\n const { onContextLost } = props;\n canvas.addEventListener('webglcontextlost', (event) => onContextLost(event), false);\n }\n if (props.onContextRestored) {\n // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.\n const { onContextRestored } = props;\n canvas.addEventListener('webglcontextrestored', (event) => onContextRestored(event), false);\n }\n return gl;\n}\n/* TODO - can we call this asynchronously to catch the error events?\nexport async function createBrowserContextAsync(canvas: HTMLCanvasElement | OffscreenCanvas, props: ContextProps): Promise {\n props = {...DEFAULT_CONTEXT_PROPS, ...props};\n\n // Try to extract any extra information about why context creation failed\n let errorMessage = null;\n const onCreateError = (error) => (errorMessage = error.statusMessage || errorMessage);\n canvas.addEventListener('webglcontextcreationerror', onCreateError, false);\n\n const gl = createBrowserContext(canvas, props);\n\n // Give the listener a chance to fire\n await new Promise(resolve => setTimeout(resolve, 0));\n\n canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);\n\n return gl;\n}\n*/\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Ensure extensions are only requested once */\nexport function getWebGLExtension(gl, name, extensions) {\n if (extensions[name] === undefined) {\n extensions[name] = gl.getExtension(name) || null;\n }\n return extensions[name];\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\nimport { getWebGLExtension } from \"../../context/helpers/webgl-extensions.js\";\n/** @returns strings identifying the GPU vendor and driver. */\nexport function getDeviceInfo(gl, extensions) {\n // \"Masked\" info is always available, but don't contain much useful information\n const vendorMasked = gl.getParameter(7936);\n const rendererMasked = gl.getParameter(7937);\n // If we are lucky, unmasked info is available\n // https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n getWebGLExtension(gl, 'WEBGL_debug_renderer_info', extensions);\n const ext = extensions.WEBGL_debug_renderer_info;\n const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : 7936);\n const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : 7937);\n const vendor = vendorUnmasked || vendorMasked;\n const renderer = rendererUnmasked || rendererMasked;\n // Driver version\n const version = gl.getParameter(7938);\n // \"Sniff\" the GPU type and backend from the info. This works best if unmasked info is available.\n const gpu = identifyGPUVendor(vendor, renderer);\n const gpuBackend = identifyGPUBackend(vendor, renderer);\n const gpuType = identifyGPUType(vendor, renderer);\n // Determine GLSL version\n // For now, skip parsing of the long version string, just use context type below to deduce version\n // const version = gl.getParameter(GL.SHADING_LANGUAGE_VERSION) as string;\n // const shadingLanguageVersion = parseGLSLVersion(version);\n const shadingLanguage = 'glsl';\n const shadingLanguageVersion = 300;\n return {\n type: 'webgl',\n gpu,\n gpuType,\n gpuBackend,\n vendor,\n renderer,\n version,\n shadingLanguage,\n shadingLanguageVersion\n };\n}\n/** \"Sniff\" the GPU type from the info. This works best if unmasked info is available. */\nfunction identifyGPUVendor(vendor, renderer) {\n if (/NVIDIA/i.exec(vendor) || /NVIDIA/i.exec(renderer)) {\n return 'nvidia';\n }\n if (/INTEL/i.exec(vendor) || /INTEL/i.exec(renderer)) {\n return 'intel';\n }\n if (/Apple/i.exec(vendor) || /Apple/i.exec(renderer)) {\n return 'apple';\n }\n if (/AMD/i.exec(vendor) ||\n /AMD/i.exec(renderer) ||\n /ATI/i.exec(vendor) ||\n /ATI/i.exec(renderer)) {\n return 'amd';\n }\n if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {\n return 'software';\n }\n return 'unknown';\n}\n/** \"Sniff\" the GPU backend from the info. This works best if unmasked info is available. */\nfunction identifyGPUBackend(vendor, renderer) {\n if (/Metal/i.exec(vendor) || /Metal/i.exec(renderer)) {\n return 'metal';\n }\n if (/ANGLE/i.exec(vendor) || /ANGLE/i.exec(renderer)) {\n return 'opengl';\n }\n return 'unknown';\n}\nfunction identifyGPUType(vendor, renderer) {\n if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {\n return 'cpu';\n }\n const gpuVendor = identifyGPUVendor(vendor, renderer);\n switch (gpuVendor) {\n case 'intel':\n return 'integrated';\n case 'software':\n return 'cpu';\n case 'unknown':\n return 'unknown';\n default:\n return 'discrete';\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\n/** Get vertex format from GL constants */\nexport function getVertexFormatFromGL(type, components) {\n const base = getVertexTypeFromGL(type);\n // prettier-ignore\n switch (components) {\n // @ts-expect-error TODO deal with lack of formats\n case 1: return base;\n case 2: return `${base}x2`;\n // @ts-expect-error TODO deal with lack of formats\n case 3: return `${base}x3`;\n case 4: return `${base}x4`;\n }\n // @ts-ignore unreachable\n throw new Error(String(components));\n}\n/** Get data type from GL constants */\nexport function getVertexTypeFromGL(type, normalized = false) {\n // prettier-ignore\n switch (type) {\n // WebGPU does not support normalized 32 bit integer attributes\n case 5124: return normalized ? 'sint32' : 'sint32';\n case 5125: return normalized ? 'uint32' : 'uint32';\n case 5122: return normalized ? 'sint16' : 'unorm16';\n case 5123: return normalized ? 'uint16' : 'unorm16';\n case 5120: return normalized ? 'sint8' : 'snorm16';\n case 5121: return normalized ? 'uint8' : 'unorm8';\n case 5126: return 'float32';\n case 5131: return 'float16';\n }\n // @ts-ignore unreachable\n throw new Error(String(type));\n}\nexport function getGLFromVertexType(dataType) {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return 5121;\n case 'sint8': return 5120;\n case 'unorm8': return 5121;\n case 'snorm8': return 5120;\n case 'uint16': return 5123;\n case 'sint16': return 5122;\n case 'unorm16': return 5123;\n case 'snorm16': return 5122;\n case 'uint32': return 5125;\n case 'sint32': return 5124;\n // WebGPU does not support normalized 32 bit integer attributes\n // case 'unorm32': return GL.UNSIGNED_INT;\n // case 'snorm32': return GL.INT;\n case 'float16': return 5131;\n case 'float32': return 5126;\n }\n // @ts-ignore unreachable\n throw new Error(String(dataType));\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { decodeTextureFormat } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { getWebGLExtension } from \"../../context/helpers/webgl-extensions.js\";\nimport { getGLFromVertexType } from \"./vertex-formats.js\";\n/* eslint-disable camelcase */\n// TEXTURE FEATURES\n// Define local device feature strings to optimize minification\nconst texture_compression_bc = 'texture-compression-bc';\nconst texture_compression_astc = 'texture-compression-astc';\nconst texture_compression_etc2 = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl = 'texture-compression-atc-webgl';\nconst float32_renderable = 'float32-renderable-webgl';\nconst float16_renderable = 'float16-renderable-webgl';\nconst rgb9e5ufloat_renderable = 'rgb9e5ufloat_renderable-webgl';\nconst snorm8_renderable = 'snorm8-renderable-webgl';\nconst norm16_renderable = 'norm16-renderable-webgl';\nconst snorm16_renderable = 'snorm16-renderable-webgl';\nconst float32_filterable = 'float32-filterable';\nconst float16_filterable = 'float16-filterable-webgl';\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n// Define local webgl extension strings to optimize minification\nconst EXT_texture_norm16 = 'EXT_texture_norm16';\nconst EXT_render_snorm = 'EXT_render_snorm';\nconst EXT_color_buffer_float = 'EXT_color_buffer_float';\n// prettier-ignore\nexport const TEXTURE_FEATURES = {\n 'float32-renderable-webgl': ['EXT_color_buffer_float'],\n 'float16-renderable-webgl': ['EXT_color_buffer_half_float'],\n 'rgb9e5ufloat_renderable-webgl': ['WEBGL_render_shared_exponent'],\n 'snorm8-renderable-webgl': [EXT_render_snorm],\n 'norm16-renderable-webgl': [EXT_texture_norm16],\n 'snorm16-renderable-webgl': [EXT_texture_norm16, EXT_render_snorm],\n 'float32-filterable': ['OES_texture_float_linear'],\n 'float16-filterable-webgl': ['OES_texture_half_float_linear'],\n 'texture-filterable-anisotropic-webgl': ['EXT_texture_filter_anisotropic'],\n 'texture-blend-float-webgl': ['EXT_float_blend'],\n 'texture-compression-bc': [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC],\n // 'texture-compression-bc3-srgb-webgl': [X_S3TC_SRGB],\n // 'texture-compression-bc3-webgl': [X_S3TC],\n 'texture-compression-bc5-webgl': [X_RGTC],\n 'texture-compression-bc7-webgl': [X_BPTC],\n 'texture-compression-etc2': [X_ETC2],\n 'texture-compression-astc': [X_ASTC],\n 'texture-compression-etc1-webgl': [X_ETC1],\n 'texture-compression-pvrtc-webgl': [X_PVRTC],\n 'texture-compression-atc-webgl': [X_ATC]\n};\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\n// export function getTextureFeatures(\n// gl: WebGL2RenderingContext,\n// extensions: GLExtensions\n// ): DeviceFeature[] {\n// const textureFeatures = Object.keys(TEXTURE_FEATURES) as DeviceFeature[];\n// return textureFeatures.filter(feature => checkTextureFeature(gl, feature, extensions));\n// }\nexport function isTextureFeature(feature) {\n return feature in TEXTURE_FEATURES;\n}\n/** Checks a texture feature (for Device.features). Mainly compressed texture support */\nexport function checkTextureFeature(gl, feature, extensions) {\n const textureExtensions = TEXTURE_FEATURES[feature] || [];\n return textureExtensions.every(extension => getWebGLExtension(gl, extension, extensions));\n}\n// TABLES\n/**\n * Texture format data -\n * Exported but can change without notice\n */\n// prettier-ignore\nexport const TEXTURE_FORMATS = {\n // Unsized formats that leave the precision up to the driver. TODO - Fix bpp constants\n 'rgb8unorm-unsized': { gl: 6407, b: 4, c: 2, bpp: 4,\n dataFormat: 6407, types: [5121, 33635] },\n 'rgba8unorm-unsized': { gl: 6408, b: 4, c: 2, bpp: 4,\n dataFormat: 6408, types: [5121, 32819, 32820] },\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 8-bit formats\n 'r8unorm': { gl: 33321, b: 1, c: 1, rb: true },\n 'r8snorm': { gl: 36756, b: 1, c: 1, render: snorm8_renderable },\n 'r8uint': { gl: 33330, b: 1, c: 1, rb: true },\n 'r8sint': { gl: 33329, b: 1, c: 1, rb: true },\n // 16-bit formats\n 'rg8unorm': { gl: 33323, b: 2, c: 2, rb: true },\n 'rg8snorm': { gl: 36757, b: 2, c: 2, render: snorm8_renderable },\n 'rg8uint': { gl: 33336, b: 2, c: 2, rb: true },\n 'rg8sint': { gl: 33335, b: 2, c: 2, rb: true },\n 'r16uint': { gl: 33332, b: 2, c: 1, rb: true },\n 'r16sint': { gl: 33331, b: 2, c: 1, rb: true },\n 'r16float': { gl: 33325, b: 2, c: 1, render: float16_renderable, filter: 'float16-filterable-webgl', rb: true },\n 'r16unorm-webgl': { gl: 33322, b: 2, c: 1, f: norm16_renderable, rb: true },\n 'r16snorm-webgl': { gl: 36760, b: 2, c: 1, f: snorm16_renderable },\n // Packed 16-bit formats\n 'rgba4unorm-webgl': { gl: 32854, b: 2, c: 4, wgpu: false, rb: true },\n 'rgb565unorm-webgl': { gl: 36194, b: 2, c: 4, wgpu: false, rb: true },\n 'rgb5a1unorm-webgl': { gl: 32855, b: 2, c: 4, wgpu: false, rb: true },\n // 24-bit formats\n 'rgb8unorm-webgl': { gl: 32849, b: 3, c: 3, wgpu: false },\n 'rgb8snorm-webgl': { gl: 36758, b: 3, c: 3, wgpu: false },\n // 32-bit formats \n 'rgba8unorm': { gl: 32856, b: 4, c: 2, bpp: 4 },\n 'rgba8unorm-srgb': { gl: 35907, b: 4, c: 4, bpp: 4 },\n 'rgba8snorm': { gl: 36759, b: 4, c: 4, render: snorm8_renderable },\n 'rgba8uint': { gl: 36220, b: 4, c: 4, bpp: 4 },\n 'rgba8sint': { gl: 36238, b: 4, c: 4, bpp: 4 },\n // reverse colors, webgpu only\n 'bgra8unorm': { b: 4, c: 4 },\n 'bgra8unorm-srgb': { b: 4, c: 4 },\n 'rg16uint': { gl: 33338, b: 4, c: 1, bpp: 4 },\n 'rg16sint': { gl: 33337, b: 4, c: 2, bpp: 4 },\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': { gl: 33327, bpp: 4, b: 4, c: 2, render: float16_renderable, filter: float16_filterable, rb: true },\n 'rg16unorm-webgl': { gl: 33324, b: 2, c: 2, render: norm16_renderable },\n 'rg16snorm-webgl': { gl: 36761, b: 2, c: 2, render: snorm16_renderable },\n 'r32uint': { gl: 33334, b: 4, c: 1, bpp: 4, rb: true },\n 'r32sint': { gl: 33333, b: 4, c: 1, bpp: 4, rb: true },\n 'r32float': { gl: 33326, bpp: 4, b: 4, c: 1, render: float32_renderable, filter: float32_filterable },\n // Packed 32-bit formats\n 'rgb9e5ufloat': { gl: 35901, b: 4, c: 3, p: 1, render: rgb9e5ufloat_renderable }, // , filter: true},\n 'rg11b10ufloat': { gl: 35898, b: 4, c: 3, p: 1, render: float32_renderable, rb: true },\n 'rgb10a2unorm': { gl: 32857, b: 4, c: 4, p: 1, rb: true },\n 'rgb10a2uint-webgl': { b: 4, c: 4, gl: 36975, p: 1, wgpu: false, bpp: 4, rb: true },\n // 48-bit formats\n 'rgb16unorm-webgl': { gl: 32852, b: 2, c: 3, f: norm16_renderable }, // rgb not renderable\n 'rgb16snorm-webgl': { gl: 36762, b: 2, c: 3, f: norm16_renderable }, // rgb not renderable\n // 64-bit formats\n 'rg32uint': { gl: 33340, b: 8, c: 2, rb: true },\n 'rg32sint': { gl: 33339, b: 8, c: 2, rb: true },\n 'rg32float': { gl: 33328, b: 8, c: 2, render: float32_renderable, filter: float32_filterable, rb: true },\n 'rgba16uint': { gl: 36214, b: 8, c: 4, rb: true },\n 'rgba16sint': { gl: 36232, b: 8, c: 4, rb: true },\n 'rgba16float': { gl: 34842, b: 8, c: 4, render: float16_renderable, filter: float16_filterable },\n 'rgba16unorm-webgl': { gl: 32859, b: 2, c: 4, render: norm16_renderable, rb: true },\n 'rgba16snorm-webgl': { gl: 36763, b: 2, c: 4, render: snorm16_renderable },\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': { gl: 34837, render: float32_renderable, filter: float32_filterable,\n gl2ext: EXT_color_buffer_float, dataFormat: 6407, types: [5126] },\n // 128-bit formats\n 'rgba32uint': { gl: 36208, b: 16, c: 4, rb: true },\n 'rgba32sint': { gl: 36226, b: 16, c: 4, rb: true },\n 'rgba32float': { gl: 34836, b: 16, c: 4, render: float32_renderable, filter: float32_filterable, rb: true },\n // Depth and stencil formats\n 'stencil8': { gl: 36168, b: 1, c: 1, attachment: 36128, rb: true }, // 8 stencil bits\n 'depth16unorm': { gl: 33189, b: 2, c: 1, attachment: 36096,\n dataFormat: 6402, types: [5123], rb: true }, // 16 depth bits\n 'depth24plus': { gl: 33190, b: 3, c: 1, attachment: 36096,\n dataFormat: 6402, types: [5125] },\n 'depth32float': { gl: 36012, b: 4, c: 1, attachment: 36096,\n dataFormat: 6402, types: [5126], rb: true },\n // The depth component of the \"depth24plus\" and \"depth24plus-stencil8\" formats may be implemented as either a 24-bit depth value or a \"depth32float\" value.\n 'depth24plus-stencil8': { gl: 35056, b: 4, c: 2, p: 1, attachment: 33306, rb: true, depthTexture: true,\n dataFormat: 34041, types: [34042] },\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': { gl: 35056, b: 4, c: 2, p: 1, attachment: 33306,\n dataFormat: 34041, types: [34042], rb: true },\n // \"depth32float-stencil8\" feature - TODO below is render buffer only?\n 'depth32float-stencil8': { gl: 36013, b: 5, c: 2, p: 1, attachment: 33306,\n dataFormat: 34041, types: [36269], rb: true },\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n 'bc1-rgb-unorm-webgl': { gl: 33776, x: X_S3TC, f: texture_compression_bc },\n 'bc1-rgb-unorm-srgb-webgl': { gl: 35916, x: X_S3TC_SRGB, f: texture_compression_bc },\n 'bc1-rgba-unorm': { gl: 33777, x: X_S3TC, f: texture_compression_bc },\n 'bc1-rgba-unorm-srgb': { gl: 35916, x: X_S3TC_SRGB, f: texture_compression_bc },\n 'bc2-rgba-unorm': { gl: 33778, x: X_S3TC, f: texture_compression_bc },\n 'bc2-rgba-unorm-srgb': { gl: 35918, x: X_S3TC_SRGB, f: texture_compression_bc },\n 'bc3-rgba-unorm': { gl: 33779, x: X_S3TC, f: texture_compression_bc },\n 'bc3-rgba-unorm-srgb': { gl: 35919, x: X_S3TC_SRGB, f: texture_compression_bc },\n 'bc4-r-unorm': { gl: 36283, x: X_RGTC, f: texture_compression_bc },\n 'bc4-r-snorm': { gl: 36284, x: X_RGTC, f: texture_compression_bc },\n 'bc5-rg-unorm': { gl: 36285, x: X_RGTC, f: texture_compression_bc },\n 'bc5-rg-snorm': { gl: 36286, x: X_RGTC, f: texture_compression_bc },\n 'bc6h-rgb-ufloat': { gl: 36495, x: X_BPTC, f: texture_compression_bc },\n 'bc6h-rgb-float': { gl: 36494, x: X_BPTC, f: texture_compression_bc },\n 'bc7-rgba-unorm': { gl: 36492, x: X_BPTC, f: texture_compression_bc },\n 'bc7-rgba-unorm-srgb': { gl: 36493, x: X_BPTC, f: texture_compression_bc },\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n 'etc2-rgb8unorm': { gl: 37492, f: texture_compression_etc2 },\n 'etc2-rgb8unorm-srgb': { gl: 37494, f: texture_compression_etc2 },\n 'etc2-rgb8a1unorm': { gl: 37496, f: texture_compression_etc2 },\n 'etc2-rgb8a1unorm-srgb': { gl: 37497, f: texture_compression_etc2 },\n 'etc2-rgba8unorm': { gl: 37493, f: texture_compression_etc2 },\n 'etc2-rgba8unorm-srgb': { gl: 37495, f: texture_compression_etc2 },\n 'eac-r11unorm': { gl: 37488, f: texture_compression_etc2 },\n 'eac-r11snorm': { gl: 37489, f: texture_compression_etc2 },\n 'eac-rg11unorm': { gl: 37490, f: texture_compression_etc2 },\n 'eac-rg11snorm': { gl: 37491, f: texture_compression_etc2 },\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n 'astc-4x4-unorm': { gl: 37808, f: texture_compression_astc },\n 'astc-4x4-unorm-srgb': { gl: 37840, f: texture_compression_astc },\n 'astc-5x4-unorm': { gl: 37809, f: texture_compression_astc },\n 'astc-5x4-unorm-srgb': { gl: 37841, f: texture_compression_astc },\n 'astc-5x5-unorm': { gl: 37810, f: texture_compression_astc },\n 'astc-5x5-unorm-srgb': { gl: 37842, f: texture_compression_astc },\n 'astc-6x5-unorm': { gl: 37811, f: texture_compression_astc },\n 'astc-6x5-unorm-srgb': { gl: 37843, f: texture_compression_astc },\n 'astc-6x6-unorm': { gl: 37812, f: texture_compression_astc },\n 'astc-6x6-unorm-srgb': { gl: 37844, f: texture_compression_astc },\n 'astc-8x5-unorm': { gl: 37813, f: texture_compression_astc },\n 'astc-8x5-unorm-srgb': { gl: 37845, f: texture_compression_astc },\n 'astc-8x6-unorm': { gl: 37814, f: texture_compression_astc },\n 'astc-8x6-unorm-srgb': { gl: 37846, f: texture_compression_astc },\n 'astc-8x8-unorm': { gl: 37815, f: texture_compression_astc },\n 'astc-8x8-unorm-srgb': { gl: 37847, f: texture_compression_astc },\n 'astc-10x5-unorm': { gl: 37819, f: texture_compression_astc },\n 'astc-10x5-unorm-srgb': { gl: 37851, f: texture_compression_astc },\n 'astc-10x6-unorm': { gl: 37817, f: texture_compression_astc },\n 'astc-10x6-unorm-srgb': { gl: 37849, f: texture_compression_astc },\n 'astc-10x8-unorm': { gl: 37818, f: texture_compression_astc },\n 'astc-10x8-unorm-srgb': { gl: 37850, f: texture_compression_astc },\n 'astc-10x10-unorm': { gl: 37819, f: texture_compression_astc },\n 'astc-10x10-unorm-srgb': { gl: 37851, f: texture_compression_astc },\n 'astc-12x10-unorm': { gl: 37820, f: texture_compression_astc },\n 'astc-12x10-unorm-srgb': { gl: 37852, f: texture_compression_astc },\n 'astc-12x12-unorm': { gl: 37821, f: texture_compression_astc },\n 'astc-12x12-unorm-srgb': { gl: 37853, f: texture_compression_astc },\n // WEBGL_compressed_texture_pvrtc\n 'pvrtc-rgb4unorm-webgl': { gl: 35840, f: texture_compression_pvrtc_webgl },\n 'pvrtc-rgba4unorm-webgl': { gl: 35842, f: texture_compression_pvrtc_webgl },\n 'pvrtc-rbg2unorm-webgl': { gl: 35841, f: texture_compression_pvrtc_webgl },\n 'pvrtc-rgba2unorm-webgl': { gl: 35843, f: texture_compression_pvrtc_webgl },\n // WEBGL_compressed_texture_etc1\n 'etc1-rbg-unorm-webgl': { gl: 36196, f: texture_compression_etc1_webgl },\n // WEBGL_compressed_texture_atc\n 'atc-rgb-unorm-webgl': { gl: 35986, f: texture_compression_atc_webgl },\n 'atc-rgba-unorm-webgl': { gl: 35986, f: texture_compression_atc_webgl },\n 'atc-rgbai-unorm-webgl': { gl: 34798, f: texture_compression_atc_webgl }\n};\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8]},\n// [GL.DEPTH_STENCIL]: ,\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n/* This table is now baked into the above table\ntype RenderbufferFormat = {\n bpp: number;\n gl2?: boolean;\n ext?: string;\n};\n\nexport const RENDERBUFFER_FORMATS: Record = {\n [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.\n // TODO - Not clear which webgpu value to map this to.\n // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},\n [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},\n\n [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.\n\n [GL.DEPTH_STENCIL]: {bpp: 4},\n [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},\n [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},\n\n // When using a WebGL 1 context, color renderbuffer formats are limited\n [GL.RGBA4]: {gl2: true, bpp: 2},\n [GL.RGB565]: {gl2: true, bpp: 2},\n [GL.RGB5_A1]: {gl2: true, bpp: 2},\n\n // When using a WebGL 2 context, the following values are available additionally:\n [GL.R8]: {gl2: true, bpp: 1},\n [GL.R8UI]: {gl2: true, bpp: 1},\n [GL.R8I]: {gl2: true, bpp: 1},\n [GL.R16UI]: {gl2: true, bpp: 2},\n [GL.R16I]: {gl2: true, bpp: 2},\n [GL.R32UI]: {gl2: true, bpp: 4},\n [GL.R32I]: {gl2: true, bpp: 4},\n [GL.RG8]: {gl2: true, bpp: 2},\n [GL.RG8UI]: {gl2: true, bpp: 2},\n [GL.RG8I]: {gl2: true, bpp: 2},\n [GL.RG16UI]: {gl2: true, bpp: 4},\n [GL.RG16I]: {gl2: true, bpp: 4},\n [GL.RG32UI]: {gl2: true, bpp: 8},\n [GL.RG32I]: {gl2: true, bpp: 8},\n [GL.RGB8]: {gl2: true, bpp: 3},\n [GL.RGBA8]: {gl2: true, bpp: 4},\n // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension\n [GL.RGB10_A2]: {gl2: true, bpp: 4},\n [GL.RGBA8UI]: {gl2: true, bpp: 4},\n [GL.RGBA8I]: {gl2: true, bpp: 4},\n [GL.RGB10_A2UI]: {gl2: true, bpp: 4},\n [GL.RGBA16UI]: {gl2: true, bpp: 8},\n [GL.RGBA16I]: {gl2: true, bpp: 8},\n [GL.RGBA32I]: {gl2: true, bpp: 16},\n [GL.RGBA32UI]: {gl2: true, bpp: 16},\n\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},\n [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers\n [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},\n // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2},\n [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}\n};\n*/\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [6403]: 1,\n [36244]: 1,\n [33319]: 2,\n [33320]: 2,\n [6407]: 3,\n [36248]: 3,\n [6408]: 4,\n [36249]: 4,\n [6402]: 1,\n [34041]: 1,\n [6406]: 1,\n [6409]: 1,\n [6410]: 2\n};\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [5126]: 4,\n [5125]: 4,\n [5124]: 4,\n [5123]: 2,\n [5122]: 2,\n [5131]: 2,\n [5120]: 1,\n [5121]: 1\n};\n// FUNCTIONS\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(gl, format, extensions) {\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (info.gl === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || info.gl2ext;\n if (extension) {\n return Boolean(getWebGLExtension(gl, extension, extensions));\n }\n return true;\n}\nexport function isRenderbufferFormatSupported(gl, format, extensions) {\n // Note: Order is important since the function call initializes extensions.\n return isTextureFormatSupported(gl, format, extensions) && TEXTURE_FORMATS[format]?.rb;\n}\n/**\n * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings\n */\nexport function convertGLToTextureFormat(format) {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => entry.gl === format);\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0];\n}\n/**\n * Map WebGPU style texture format strings to GL constants\n */\nexport function convertTextureFormatToGL(format) {\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = formatInfo?.gl;\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(gl, format, extensions) {\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return { supported: false };\n }\n // let decoded;\n // try {\n // decoded = decodeTextureFormat(format);\n // } catch {}\n // Support Check that we have a GL constant\n let supported = info.gl === undefined;\n supported = supported && checkTextureFeature(gl, info.f, extensions);\n // Filtering\n // const filterable = info.filter\n // ? checkTextureFeature(gl, infofilter])\n // : decoded && !decoded.signed;\n // const renderable = info.filter\n // ? checkTextureFeature(gl, inforender])\n // : decoded && !decoded.signed;\n return {\n supported,\n renderable: supported && checkTextureFeature(gl, info.render, extensions),\n filterable: supported && checkTextureFeature(gl, info.filter, extensions),\n blendable: false, // tod,\n storable: false\n };\n}\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(gl, format, extensions) {\n if (!isTextureFormatSupported(gl, format, extensions)) {\n return false;\n }\n if (format.startsWith('depth') || format.startsWith('stencil')) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n }\n catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(getWebGLExtension(gl, 'OES_texture_float_linear, extensions', extensions));\n }\n if (format.endsWith('16float')) {\n return Boolean(getWebGLExtension(gl, 'OES_texture_half_float_linear, extensions', extensions));\n }\n return true;\n}\nexport function isTextureFormatRenderable(gl, format, extensions) {\n if (!isTextureFormatSupported(gl, format, extensions)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n/** Get parameters necessary to work with format in WebGL: internalFormat, dataFormat, type, compressed, */\nexport function getWebGLTextureParameters(format) {\n const formatData = TEXTURE_FORMATS[format];\n const webglFormat = convertTextureFormatToGL(format);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: formatData?.dataFormat ||\n getWebGLPixelDataFormat(decoded.format, decoded.integer, decoded.normalized, webglFormat),\n // depth formats don't have a type\n type: decoded.dataType\n ? getGLFromVertexType(decoded.dataType)\n : formatData?.types?.[0] || 5121,\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\nexport function getDepthStencilAttachmentWebGL(format) {\n const info = TEXTURE_FORMATS[format];\n if (!info?.attachment) {\n throw new Error(`${format} is not a depth stencil format`);\n }\n return info.attachment;\n}\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(format) {\n // TODO remove webgl1 support\n const params = getWebGLTextureParameters(format);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n// DATA TYPE HELPERS\nfunction getWebGLPixelDataFormat(dataFormat, integer, normalized, format) {\n // WebGL1 formats use same internalFormat\n if (format === 6408 || format === 6407) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? 36244 : 6403;\n case 'rg': return integer && !normalized ? 33320 : 33319;\n case 'rgb': return integer && !normalized ? 36248 : 6407;\n case 'rgba': return integer && !normalized ? 36249 : 6408;\n default: return 6408;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Feature detection for WebGL\n// Provides a function that enables simple checking of which WebGL features are\nimport { DeviceFeatures } from '@luma.gl/core';\nimport { getWebGLExtension } from \"../../context/helpers/webgl-extensions.js\";\nimport { isTextureFeature, checkTextureFeature } from \"../converters/texture-formats.js\";\nimport { TEXTURE_FEATURES } from \"../converters/texture-formats.js\";\n/**\n * Defines luma.gl \"feature\" names and semantics\n * when value is 'string' it is the name of the extension that enables this feature\n */\nconst WEBGL_FEATURES = {\n // optional WebGPU features\n 'depth-clip-control': 'EXT_depth_clamp', // TODO these seem subtly different\n // 'timestamp-query' // GPUQueryType \"timestamp-query\"\n // \"indirect-first-instance\"\n // Textures are handled by getTextureFeatures()\n // 'depth24unorm-stencil8' // GPUTextureFormat 'depth24unorm-stencil8'\n // 'depth32float-stencil8' // GPUTextureFormat 'depth32float-stencil8'\n // optional WebGL features\n 'timer-query-webgl': 'EXT_disjoint_timer_query_webgl2',\n 'compilation-status-async-webgl': 'KHR_parallel_shader_compile',\n 'polygon-mode-webgl': 'WEBGL_polygon_mode',\n 'provoking-vertex-webgl': 'WEBGL_provoking_vertex',\n 'shader-clip-cull-distance-webgl': 'WEBGL_clip_cull_distance',\n 'shader-noperspective-interpolation-webgl': 'NV_shader_noperspective_interpolation',\n 'shader-conservative-depth-webgl': 'EXT_conservative_depth'\n // Textures are handled by getTextureFeatures()\n};\n/**\n * WebGL extensions exposed as luma.gl features\n * To minimize GL log noise and improve performance, this class ensures that\n * - WebGL extensions are not queried until the corresponding feature is checked.\n * - WebGL extensions are only queried once.\n */\nexport class WebGLDeviceFeatures extends DeviceFeatures {\n gl;\n extensions;\n testedFeatures = new Set();\n constructor(gl, extensions, disabledFeatures) {\n super([], disabledFeatures);\n this.gl = gl;\n this.extensions = extensions;\n // TODO - is this really needed?\n // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend\n getWebGLExtension(gl, 'EXT_color_buffer_float', extensions);\n }\n *[Symbol.iterator]() {\n const features = this.getFeatures();\n for (const feature of features) {\n if (this.has(feature)) {\n yield feature;\n }\n }\n return [];\n }\n has(feature) {\n if (this.disabledFeatures[feature]) {\n return false;\n }\n // We have already tested this feature\n if (!this.testedFeatures.has(feature)) {\n this.testedFeatures.add(feature);\n // Check the feature once\n if (isTextureFeature(feature) && checkTextureFeature(this.gl, feature, this.extensions)) {\n this.features.add(feature);\n }\n if (this.getWebGLFeature(feature)) {\n this.features.add(feature);\n }\n }\n return this.features.has(feature);\n }\n // FOR DEVICE\n initializeFeatures() {\n // Initialize all features by checking them.\n // Except WEBGL_polygon_mode since Chrome logs ugly console warnings\n const features = this.getFeatures().filter(feature => feature !== 'polygon-mode-webgl');\n for (const feature of features) {\n this.has(feature);\n }\n }\n // IMPLEMENTATION\n getFeatures() {\n return [...Object.keys(WEBGL_FEATURES), ...Object.keys(TEXTURE_FEATURES)];\n }\n /** Extract all WebGL features */\n getWebGLFeature(feature) {\n const featureInfo = WEBGL_FEATURES[feature];\n // string value requires checking the corresponding WebGL extension\n const isSupported = typeof featureInfo === 'string'\n ? Boolean(getWebGLExtension(this.gl, featureInfo, this.extensions))\n : Boolean(featureInfo);\n return isSupported;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { DeviceLimits } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\n// prettier-ignore\nexport class WebGLDeviceLimits extends DeviceLimits {\n get maxTextureDimension1D() { return 0; } // WebGL does not support 1D textures\n get maxTextureDimension2D() { return this.getParameter(3379); }\n get maxTextureDimension3D() { return this.getParameter(32883); }\n get maxTextureArrayLayers() { return this.getParameter(35071); }\n get maxBindGroups() { return 0; }\n get maxDynamicUniformBuffersPerPipelineLayout() { return 0; } // TBD\n get maxDynamicStorageBuffersPerPipelineLayout() { return 0; } // TBD\n get maxSampledTexturesPerShaderStage() { return this.getParameter(35660); } // ) TBD\n get maxSamplersPerShaderStage() { return this.getParameter(35661); }\n get maxStorageBuffersPerShaderStage() { return 0; } // TBD\n get maxStorageTexturesPerShaderStage() { return 0; } // TBD\n get maxUniformBuffersPerShaderStage() { return this.getParameter(35375); }\n get maxUniformBufferBindingSize() { return this.getParameter(35376); }\n get maxStorageBufferBindingSize() { return 0; }\n get minUniformBufferOffsetAlignment() { return this.getParameter(35380); }\n get minStorageBufferOffsetAlignment() { return 0; }\n get maxVertexBuffers() { return 16; } // WebGL 2 supports 16 buffers, see https://github.com/gpuweb/gpuweb/issues/4284\n get maxVertexAttributes() { return this.getParameter(34921); }\n get maxVertexBufferArrayStride() { return 2048; } // TBD, this is just the default value from WebGPU\n get maxInterStageShaderComponents() { return this.getParameter(35659); }\n get maxComputeWorkgroupStorageSize() { return 0; } // WebGL does not support compute shaders\n get maxComputeInvocationsPerWorkgroup() { return 0; } // WebGL does not support compute shaders\n get maxComputeWorkgroupSizeX() { return 0; } // WebGL does not support compute shaders\n get maxComputeWorkgroupSizeY() { return 0; } // WebGL does not support compute shaders\n get maxComputeWorkgroupSizeZ() { return 0; } // WebGL does not support compute shaders\n get maxComputeWorkgroupsPerDimension() { return 0; } // WebGL does not support compute shaders\n // PRIVATE\n gl;\n limits = {};\n constructor(gl) {\n super();\n this.gl = gl;\n }\n getParameter(parameter) {\n if (this.limits[parameter] === undefined) {\n this.limits[parameter] = this.gl.getParameter(parameter);\n }\n return this.limits[parameter];\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/**\n * Abstract Texture interface\n * Texture Object\n * https://gpuweb.github.io/gpuweb/#gputexture\n */\nexport class Texture extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n data: null,\n dimension: '2d',\n format: 'rgba8unorm',\n width: undefined,\n height: undefined,\n depth: 1,\n mipmaps: true,\n // type: undefined,\n compressed: false,\n // mipLevels: 1,\n usage: 0,\n // usage: GPUTextureUsage.COPY_DST\n mipLevels: undefined,\n samples: undefined,\n type: undefined,\n sampler: {},\n view: undefined\n };\n static COPY_SRC = 0x01;\n static COPY_DST = 0x02;\n static TEXTURE_BINDING = 0x04;\n static STORAGE_BINDING = 0x08;\n static RENDER_ATTACHMENT = 0x10;\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n /** dimension of this texture */\n dimension;\n /** format of this texture */\n format;\n /** width in pixels of this texture */\n width;\n /** height in pixels of this texture */\n height;\n /** depth of this texture */\n depth;\n /** \"Time\" of last update. Monotonically increasing timestamp */\n updateTimestamp;\n /** Do not use directly. Create with device.createTexture() */\n constructor(device, props, defaultProps = Texture.defaultProps) {\n super(device, props, defaultProps);\n this.dimension = this.props.dimension;\n this.format = this.props.format;\n this.width = this.props.width;\n this.height = this.props.height;\n this.depth = this.props.depth;\n // TODO - perhaps this should be set on async write completion?\n this.updateTimestamp = device.incrementTimestamp();\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\nimport { Texture } from \"./texture.js\";\nimport { log } from \"../../utils/log.js\";\n/**\n * Create new textures with correct size for all attachments.\n * @note resize() destroys existing textures (if size has changed).\n */\nexport class Framebuffer extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n width: 1,\n height: 1,\n colorAttachments: [], // ['rgba8unorm'],\n depthStencilAttachment: null // 'depth24plus-stencil8'\n };\n get [Symbol.toStringTag]() {\n return 'Framebuffer';\n }\n /** Width of all attachments in this framebuffer */\n width;\n /** Height of all attachments in this framebuffer */\n height;\n /** Color attachments */\n colorAttachments = [];\n /** Depth-stencil attachment, if provided */\n depthStencilAttachment = null;\n constructor(device, props = {}) {\n super(device, props, Framebuffer.defaultProps);\n this.width = this.props.width;\n this.height = this.props.height;\n // NOTE: call from subclass constructor as we cannot call overridden methods here (subclass not yet constructed)\n // this.autoCreateAttachmentTextures();\n }\n resize(size) {\n let updateSize = !size;\n if (size) {\n const [width, height] = Array.isArray(size) ? size : [size.width, size.height];\n updateSize = updateSize || height !== this.height || width !== this.width;\n this.width = width;\n this.height = height;\n }\n if (updateSize) {\n log.log(2, `Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)();\n this.resizeAttachments(this.width, this.height);\n }\n }\n /** Auto creates any textures */\n autoCreateAttachmentTextures() {\n if (this.props.colorAttachments.length === 0 && !this.props.depthStencilAttachment) {\n throw new Error('Framebuffer has noattachments');\n }\n this.colorAttachments = this.props.colorAttachments.map(attachment => {\n if (typeof attachment === 'string') {\n const texture = this.createColorTexture(attachment);\n this.attachResource(texture);\n return texture.view;\n }\n if (attachment instanceof Texture) {\n return attachment.view;\n }\n return attachment;\n });\n const attachment = this.props.depthStencilAttachment;\n if (attachment) {\n if (typeof attachment === 'string') {\n const texture = this.createDepthStencilTexture(attachment);\n this.attachResource(texture);\n this.depthStencilAttachment = texture.view;\n }\n else if (attachment instanceof Texture) {\n this.depthStencilAttachment = attachment.view;\n }\n else {\n this.depthStencilAttachment = attachment;\n }\n }\n }\n /** Create a color texture */\n createColorTexture(format) {\n return this.device.createTexture({\n id: 'color-attachment',\n usage: Texture.RENDER_ATTACHMENT,\n format,\n width: this.width,\n height: this.height\n });\n }\n /** Create depth stencil texture */\n createDepthStencilTexture(format) {\n return this.device.createTexture({\n id: 'depth-stencil-attachment',\n usage: Texture.RENDER_ATTACHMENT,\n format,\n width: this.width,\n height: this.height\n });\n }\n /**\n * Default implementation of resize\n * Creates new textures with correct size for all attachments.\n * and destroys existing textures if owned\n */\n resizeAttachments(width, height) {\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n if (this.colorAttachments[i]) {\n const resizedTexture = this.device._createTexture({\n ...this.colorAttachments[i].props,\n width,\n height\n });\n this.destroyAttachedResource(this.colorAttachments[i]);\n this.colorAttachments[i] = resizedTexture.view;\n this.attachResource(resizedTexture.view);\n }\n }\n if (this.depthStencilAttachment) {\n const resizedTexture = this.device._createTexture({\n ...this.depthStencilAttachment.props,\n width,\n height\n });\n this.destroyAttachedResource(this.depthStencilAttachment);\n this.depthStencilAttachment = resizedTexture.view;\n this.attachResource(resizedTexture);\n }\n }\n}\n// TODO - remove if not needed\n// Create a color attachment for WebGL *\n// protected override createColorTexture(colorAttachment: Required): Required {\n// return this.device._createTexture({\n// id: `${this.id}-color`,\n// data: null, // reserves texture memory, but texels are undefined\n// format,\n// // type: GL.UNSIGNED_BYTE,\n// width: this.width,\n// height: this.height,\n// // Note: Mipmapping can be disabled by texture resource when we resize the texture\n// // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n// // behavior we always disable mipmaps.\n// mipmaps: false,\n// // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n// // Use LINEAR so subpixel algos like fxaa work.\n// // Set WRAP modes that support NPOT textures too.\n// sampler: {\n// minFilter: 'linear',\n// magFilter: 'linear',\n// addressModeU: 'clamp-to-edge',\n// addressModeV: 'clamp-to-edge'\n// }\n// // parameters: {\n// // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n// // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n// // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n// // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n// // }\n// });\n// }\n// /** Returns fully populated attachment object. */\n// protected normalizeColorAttachment(\n// attachment: Texture | ColorTextureFormat\n// ): Required {\n// const COLOR_ATTACHMENT_DEFAULTS: Required = {\n// texture: undefined!,\n// format: undefined!,\n// clearValue: [0.0, 0.0, 0.0, 0.0],\n// loadOp: 'clear',\n// storeOp: 'store'\n// };\n// if (attachment instanceof Texture) {\n// return {...COLOR_ATTACHMENT_DEFAULTS, texture: attachment};\n// }\n// if (typeof attachment === 'string') {\n// return {...COLOR_ATTACHMENT_DEFAULTS, format: attachment};\n// }\n// return {...COLOR_ATTACHMENT_DEFAULTS, ...attachment};\n// }\n// /** Wraps texture inside fully populated attachment object. */\n// protected normalizeDepthStencilAttachment(\n// attachment: DepthStencilAttachment | Texture | DepthStencilTextureFormat\n// ): Required {\n// const DEPTH_STENCIL_ATTACHMENT_DEFAULTS: Required = {\n// texture: undefined!,\n// format: undefined!,\n// depthClearValue: 1.0,\n// depthLoadOp: 'clear',\n// depthStoreOp: 'store',\n// depthReadOnly: false,\n// stencilClearValue: 0,\n// stencilLoadOp: 'clear',\n// stencilStoreOp: 'store',\n// stencilReadOnly: false\n// };\n// if (typeof attachment === 'string') {\n// return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, format: attachment};\n// }\n// // @ts-expect-error attachment instanceof Texture doesn't cover Renderbuffer\n// if (attachment.handle || attachment instanceof Texture) {\n// return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, texture: attachment as Texture};\n// }\n// return {...DEPTH_STENCIL_ATTACHMENT_DEFAULTS, ...attachment};\n// }\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nlet pathPrefix = '';\n/**\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\n/**\n * Reads raw file data. Respects setPathPrefix.\n */\nexport async function loadFile(url, options) {\n url = url.startsWith('http') ? url : pathPrefix + url;\n const dataType = options?.dataType || 'text';\n const response = await fetch(url, options);\n return await response[dataType]();\n}\n/**\n * Loads ImageBitmap asynchronously. Respects setPathPrefix.\n * image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'\n * @returns a promise tracking the load\n */\nexport async function loadImageBitmap(url, opts) {\n const image = new Image();\n image.crossOrigin = opts?.crossOrigin || 'anonymous';\n image.src = url.startsWith('http') ? url : pathPrefix + url;\n await image.decode();\n return await createImageBitmap(image);\n}\n/**\n * Loads image asynchronously. Respects setPathPrefix.\n * image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'\n * @returns a promise tracking the load\n * @deprecated Use `loadImageBitmap()` unless you are supporting old versions of Safari.\n */\nexport async function loadImage(url, opts) {\n return await new Promise((resolve, reject) => {\n try {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error(`Could not load image ${url}.`));\n image.crossOrigin = opts?.crossOrigin || 'anonymous';\n image.src = url.startsWith('http') ? url : pathPrefix + url;\n }\n catch (error) {\n reject(error);\n }\n });\n}\n/**\n * Load a script (identified by an url). When the url returns, the\n * content of this file is added into a new script element, attached to the DOM (body element)\n * @param scriptUrl defines the url of the script to laod\n * @param scriptId defines the id of the script element\n */\nexport async function loadScript(scriptUrl, scriptId) {\n const head = document.getElementsByTagName('head')[0];\n if (!head) {\n throw new Error('loadScript');\n }\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', scriptUrl);\n if (scriptId) {\n script.id = scriptId;\n }\n return new Promise((resolve, reject) => {\n script.onload = resolve;\n script.onerror = error => reject(new Error(`Unable to load script '${scriptUrl}': ${error}`));\n head.appendChild(script);\n });\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { setGLParameters } from \"../parameters/unified-parameter-api.js\";\nimport { pushContextState, popContextState } from \"./track-context-state.js\";\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withGLParameters(gl, parameters, func) {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(gl);\n }\n const { nocatch = true } = parameters;\n pushContextState(gl);\n setGLParameters(gl, parameters);\n // Setup is done, call the function\n let value;\n if (nocatch) {\n // Avoid try catch to minimize stack size impact for safe execution paths\n value = func(gl);\n popContextState(gl);\n }\n else {\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n try {\n value = func(gl);\n }\n finally {\n popContextState(gl);\n }\n }\n return value;\n}\n// Helpers\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(object) {\n // @ts-ignore - dummy key variable\n for (const key in object) {\n return false;\n }\n return true;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log, isObjectEmpty } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { pushContextState, popContextState } from \"../../context/state-tracker/track-context-state.js\";\nimport { setGLParameters } from \"../../context/parameters/unified-parameter-api.js\";\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters(device, parameters, glParameters, func) {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n const webglDevice = device;\n pushContextState(webglDevice.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(webglDevice.gl, glParameters);\n return func(device);\n }\n finally {\n popContextState(webglDevice.gl);\n }\n}\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters(device, parameters, func) {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n const webglDevice = device;\n pushContextState(webglDevice.gl);\n try {\n setGLParameters(webglDevice.gl, parameters);\n return func(device);\n }\n finally {\n popContextState(webglDevice.gl);\n }\n}\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters(device, parameters, func) {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n }\n finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device, parameters) {\n const webglDevice = device;\n const { gl } = webglDevice;\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(2884);\n break;\n case 'front':\n gl.enable(2884);\n gl.cullFace(1028);\n break;\n case 'back':\n gl.enable(2884);\n gl.cullFace(1029);\n break;\n }\n }\n if (parameters.frontFace) {\n gl.frontFace(map('frontFace', parameters.frontFace, {\n ccw: 2305,\n cw: 2304\n }));\n }\n if (parameters.unclippedDepth) {\n if (device.features.has('depth-clip-control')) {\n // EXT_depth_clamp\n gl.enable(34383);\n }\n }\n if (parameters.depthBias !== undefined) {\n gl.enable(32823);\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n // WEBGL EXTENSIONS\n if (parameters.provokingVertex) {\n if (device.features.has('provoking-vertex-webgl')) {\n const extensions = webglDevice.getExtension('WEBGL_provoking_vertex');\n const ext = extensions.WEBGL_provoking_vertex;\n const vertex = map('provokingVertex', parameters.provokingVertex, {\n first: 36429,\n last: 36430\n });\n ext?.provokingVertexWEBGL(vertex);\n }\n }\n if (parameters.polygonMode || parameters.polygonOffsetLine) {\n if (device.features.has('polygon-mode-webgl')) {\n if (parameters.polygonMode) {\n const extensions = webglDevice.getExtension('WEBGL_polygon_mode');\n const ext = extensions.WEBGL_polygon_mode;\n const mode = map('polygonMode', parameters.polygonMode, {\n fill: 6914,\n line: 6913\n });\n ext?.polygonModeWEBGL(1028, mode);\n ext?.polygonModeWEBGL(1029, mode);\n }\n if (parameters.polygonOffsetLine) {\n gl.enable(10754);\n }\n }\n }\n if (device.features.has('shader-clip-cull-distance-webgl')) {\n if (parameters.clipDistance0) {\n gl.enable(12288);\n }\n if (parameters.clipDistance1) {\n gl.enable(12289);\n }\n if (parameters.clipDistance2) {\n gl.enable(12290);\n }\n if (parameters.clipDistance3) {\n gl.enable(12291);\n }\n if (parameters.clipDistance4) {\n gl.enable(12292);\n }\n if (parameters.clipDistance5) {\n gl.enable(12293);\n }\n if (parameters.clipDistance6) {\n gl.enable(12294);\n }\n if (parameters.clipDistance7) {\n gl.enable(12295);\n }\n }\n // DEPTH STENCIL\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(2929) : gl.disable(2929);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(1028, mask);\n gl.stencilMaskSeparate(1029, mask);\n }\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(2960)\n : gl.disable(2960);\n gl.stencilFuncSeparate(1028, glValue, 0, mask);\n gl.stencilFuncSeparate(1029, glValue, 0, mask);\n }\n if (parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);\n gl.stencilOpSeparate(1028, sfail, dpfail, dppass);\n gl.stencilOpSeparate(1029, sfail, dpfail, dppass);\n }\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n // COLOR STATE\n if (parameters.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(3042);\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');\n gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n }\n}\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\nexport function convertCompareFunction(parameter, value) {\n return map(parameter, value, {\n never: 512,\n less: 513,\n equal: 514,\n 'less-equal': 515,\n greater: 516,\n 'not-equal': 517,\n 'greater-equal': 518,\n always: 519\n });\n}\nexport function convertToCompareFunction(parameter, value) {\n return map(parameter, value, {\n [512]: 'never',\n [513]: 'less',\n [514]: 'equal',\n [515]: 'less-equal',\n [516]: 'greater',\n [517]: 'not-equal',\n [518]: 'greater-equal',\n [519]: 'always'\n });\n}\nfunction convertStencilOperation(parameter, value) {\n return map(parameter, value, {\n keep: 7680,\n zero: 0,\n replace: 7681,\n invert: 5386,\n 'increment-clamp': 7682,\n 'decrement-clamp': 7683,\n 'increment-wrap': 34055,\n 'decrement-wrap': 34056\n });\n}\nfunction convertBlendOperationToEquation(parameter, value) {\n return map(parameter, value, {\n add: 32774,\n subtract: 32778,\n 'reverse-subtract': 32779,\n min: 32775,\n max: 32776\n });\n}\nfunction convertBlendFactorToFunction(parameter, value) {\n return map(parameter, value, {\n one: 1,\n zero: 0,\n 'src-color': 768,\n 'one-minus-src-color': 769,\n 'dst-color': 774,\n 'one-minus-dst-color': 775,\n 'src-alpha': 770,\n 'one-minus-src-alpha': 771,\n 'dst-alpha': 772,\n 'one-minus-dst-alpha': 773,\n 'src-alpha-saturated': 776,\n 'constant-color': 32769,\n 'one-minus-constant-color': 32770,\n 'constant-alpha': 32771,\n 'one-minus-constant-alpha': 32772\n });\n}\nfunction message(parameter, value) {\n return `Illegal parameter ${value} for ${parameter}`;\n}\nfunction map(parameter, value, valueMap) {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\nfunction mapBoolean(parameter, value) {\n return value;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\nimport { convertCompareFunction } from \"./device-parameters.js\";\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props) {\n const params = {};\n if (props.addressModeU) {\n params[10242] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[10243] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[32882] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[10240] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[10241] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[33082] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[33083] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[34892] = 34894;\n }\n if (props.compare) {\n params[34893] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[34046] = props.maxAnisotropy;\n }\n return params;\n}\n// HELPERS\n/** Convert address more */\nfunction convertAddressMode(addressMode) {\n switch (addressMode) {\n case 'clamp-to-edge':\n return 33071;\n case 'repeat':\n return 10497;\n case 'mirror-repeat':\n return 33648;\n }\n}\nfunction convertMaxFilterMode(maxFilter) {\n switch (maxFilter) {\n case 'nearest':\n return 9728;\n case 'linear':\n return 9729;\n }\n}\n/**\n * WebGPU has separate min filter and mipmap filter,\n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter, mipmapFilter) {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest':\n return mipmapFilter === 'nearest' ? 9984 : 9986;\n case 'linear':\n return mipmapFilter === 'nearest' ? 9985 : 9987;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer, assert } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\n/** WebGL Buffer interface */\nexport class WEBGLBuffer extends Buffer {\n device;\n gl;\n handle;\n /** Target in OpenGL defines the type of buffer */\n glTarget;\n /** Usage is a hint on how frequently the buffer will be updates */\n glUsage;\n /** Index type is needed when issuing draw calls, so we pre-compute it */\n glIndexType = 5123;\n /** Number of bytes allocated on the GPU for this buffer */\n byteLength;\n /** Number of bytes used */\n bytesUsed;\n constructor(device, props = {}) {\n super(device, props);\n this.device = device;\n this.gl = this.device.gl;\n const handle = typeof props === 'object' ? props.handle : undefined;\n this.handle = handle || this.gl.createBuffer();\n device.setSpectorMetadata(this.handle, { ...this.props, data: typeof this.props.data });\n // - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n this.glTarget = getWebGLTarget(this.props.usage);\n this.glUsage = getWebGLUsage(this.props.usage);\n this.glIndexType = this.props.indexType === 'uint32' ? 5125 : 5123;\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._initWithData(props.data, props.byteOffset, props.byteLength);\n }\n else {\n this._initWithByteLength(props.byteLength || 0);\n }\n }\n // PRIVATE METHODS\n /** Allocate a new buffer and initialize to contents of typed array */\n _initWithData(data, byteOffset = 0, byteLength = data.byteLength + byteOffset) {\n // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;\n const glTarget = this.glTarget;\n this.gl.bindBuffer(glTarget, this.handle);\n this.gl.bufferData(glTarget, byteLength, this.glUsage);\n this.gl.bufferSubData(glTarget, byteOffset, data);\n this.gl.bindBuffer(glTarget, null);\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n this._setDebugData(data, byteOffset, byteLength);\n this.trackAllocatedMemory(byteLength);\n }\n // Allocate a GPU buffer of specified size.\n _initWithByteLength(byteLength) {\n assert(byteLength >= 0);\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n // @ts-expect-error\n data = new Float32Array(0);\n }\n // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;\n const glTarget = this.glTarget;\n this.gl.bindBuffer(glTarget, this.handle);\n this.gl.bufferData(glTarget, data, this.glUsage);\n this.gl.bindBuffer(glTarget, null);\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n this._setDebugData(null, 0, byteLength);\n this.trackAllocatedMemory(byteLength);\n return this;\n }\n destroy() {\n if (!this.destroyed && this.handle) {\n this.removeStats();\n this.trackDeallocatedMemory();\n this.gl.deleteBuffer(this.handle);\n this.destroyed = true;\n // @ts-expect-error\n this.handle = null;\n }\n }\n write(data, byteOffset = 0) {\n const srcOffset = 0;\n const byteLength = undefined; // data.byteLength;\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const glTarget = 36663;\n this.gl.bindBuffer(glTarget, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n this.gl.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);\n }\n else {\n this.gl.bufferSubData(glTarget, byteOffset, data);\n }\n this.gl.bindBuffer(glTarget, null);\n this._setDebugData(data, byteOffset, data.byteLength);\n }\n /** Asynchronously read data from the buffer */\n async readAsync(byteOffset = 0, byteLength) {\n return this.readSyncWebGL(byteOffset, byteLength);\n }\n /** Synchronously read data from the buffer. WebGL only. */\n readSyncWebGL(byteOffset = 0, byteLength) {\n byteLength = byteLength ?? this.byteLength - byteOffset;\n const data = new Uint8Array(byteLength);\n const dstOffset = 0;\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(36662, this.handle);\n this.gl.getBufferSubData(36662, byteOffset, data, dstOffset, byteLength);\n this.gl.bindBuffer(36662, null);\n // Update local `data` if offsets are 0\n this._setDebugData(data, byteOffset, byteLength);\n return data;\n }\n}\n/**\n * Returns a WebGL buffer target\n *\n * @param usage\n * static MAP_READ = 0x01;\n * static MAP_WRITE = 0x02;\n * static COPY_SRC = 0x0004;\n * static COPY_DST = 0x0008;\n * static INDEX = 0x0010;\n * static VERTEX = 0x0020;\n * static UNIFORM = 0x0040;\n * static STORAGE = 0x0080;\n * static INDIRECT = 0x0100;\n * static QUERY_RESOLVE = 0x0200;\n *\n * @returns WebGL buffer targe\n *\n * Buffer bind points in WebGL2\n * gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.\n * gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.\n * gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.\n * gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.\n * gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.\n */\nfunction getWebGLTarget(usage) {\n if (usage & Buffer.INDEX) {\n return 34963;\n }\n if (usage & Buffer.VERTEX) {\n return 34962;\n }\n if (usage & Buffer.UNIFORM) {\n return 35345;\n }\n // Binding a buffer for the first time locks the type\n // In WebGL2, we can use GL.COPY_WRITE_BUFFER to avoid locking the type\n return 34962;\n}\n/** @todo usage is not passed correctly */\nfunction getWebGLUsage(usage) {\n if (usage & Buffer.INDEX) {\n return 35044;\n }\n if (usage & Buffer.VERTEX) {\n return 35044;\n }\n if (usage & Buffer.UNIFORM) {\n return 35048;\n }\n return 35044;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/** Immutable Sampler object */\nexport class Sampler extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n type: 'color-sampler',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'clamp-to-edge',\n magFilter: 'nearest',\n minFilter: 'nearest',\n mipmapFilter: 'nearest',\n lodMinClamp: 0,\n lodMaxClamp: 32, // Per WebGPU spec\n compare: 'less-equal',\n maxAnisotropy: 1\n };\n get [Symbol.toStringTag]() {\n return 'Sampler';\n }\n constructor(device, props) {\n super(device, props, Sampler.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Sampler } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { convertSamplerParametersToWebGL } from \"../converters/sampler-parameters.js\";\n/**\n * Sampler object -\n * so that they can be set directly on the texture\n * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html\n */\nexport class WEBGLSampler extends Sampler {\n device;\n handle;\n parameters;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.parameters = convertSamplerParametersToWebGL(props);\n this.handle = this.handle || this.device.gl.createSampler();\n this._setSamplerParameters(this.parameters);\n }\n destroy() {\n if (this.handle) {\n this.device.gl.deleteSampler(this.handle);\n // @ts-expect-error read-only/undefined\n this.handle = undefined;\n }\n }\n toString() {\n return `Sampler(${this.id},${JSON.stringify(this.props)})`;\n }\n /** Set sampler parameters on the sampler */\n _setSamplerParameters(parameters) {\n for (const [pname, value] of Object.entries(parameters)) {\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n const param = Number(pname);\n switch (param) {\n case 33082:\n case 33083:\n this.device.gl.samplerParameterf(this.handle, param, value);\n break;\n default:\n this.device.gl.samplerParameteri(this.handle, param, value);\n break;\n }\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/** Immutable TextureView object */\nexport class TextureView extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n format: undefined,\n dimension: undefined,\n aspect: 'all',\n baseMipLevel: 0,\n mipLevelCount: undefined,\n baseArrayLayer: 0,\n arrayLayerCount: undefined\n };\n get [Symbol.toStringTag]() {\n return 'TextureView';\n }\n /** Should not be constructed directly. Use `texture.createView(props)` */\n constructor(device, props) {\n super(device, props, TextureView.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// import {decodeTextureFormat} from '@luma.gl/core';\nimport { TextureView, Texture } from '@luma.gl/core';\nexport class WEBGLTextureView extends TextureView {\n device;\n gl;\n handle;\n texture;\n constructor(device, props) {\n super(device, { ...Texture.defaultProps, ...props });\n this.device = device;\n this.gl = this.device.gl;\n this.handle = null;\n this.texture = props.texture;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Texture, log, assert, loadImage, isObjectEmpty } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { withGLParameters } from \"../../context/state-tracker/with-parameters.js\";\nimport { convertTextureFormatToGL, getWebGLTextureParameters, getTextureFormatBytesPerPixel } from \"../converters/texture-formats.js\";\nimport { convertSamplerParametersToWebGL } from \"../converters/sampler-parameters.js\";\nimport { WEBGLBuffer } from \"./webgl-buffer.js\";\nimport { WEBGLSampler } from \"./webgl-sampler.js\";\nimport { WEBGLTextureView } from \"./webgl-texture-view.js\";\nexport const DEFAULT_WEBGL_TEXTURE_PROPS = {\n // deprecated\n parameters: {},\n pixelStore: {},\n pixels: null,\n border: 0,\n dataFormat: undefined,\n textureUnit: undefined,\n target: undefined\n};\n// Polyfill\nexport class WEBGLTexture extends Texture {\n // TODO - remove?\n static FACES = [\n 34069,\n 34070,\n 34071,\n 34072,\n 34073,\n 34074\n ];\n MAX_ATTRIBUTES;\n device;\n gl;\n handle;\n // (TODO - currently unused in WebGL, but WebGL 2 does support sampler objects) */\n sampler = undefined;\n view = undefined;\n // data;\n glFormat = undefined;\n type = undefined;\n dataFormat = undefined;\n mipmaps = undefined;\n /**\n * @note `target` cannot be modified by bind:\n * textures are special because when you first bind them to a target,\n * they get special information. When you first bind a texture as a\n * GL_TEXTURE_2D, you are saying that this texture is a 2D texture.\n * And it will always be a 2D texture; this state cannot be changed ever.\n * A texture that was first bound as a GL_TEXTURE_2D, must always be bound as a GL_TEXTURE_2D;\n * attempting to bind it as GL_TEXTURE_3D will give rise to a run-time error\n * */\n target;\n textureUnit = undefined;\n /**\n * Program.draw() checks the loaded flag of all textures to avoid\n * Textures that are still loading from promises\n * Set to true as soon as texture has been initialized with valid data\n */\n loaded = false;\n _video;\n constructor(device, props) {\n super(device, { ...DEFAULT_WEBGL_TEXTURE_PROPS, format: 'rgba8unorm', ...props });\n this.device = device;\n this.gl = this.device.gl;\n this.handle = this.props.handle || this.gl.createTexture();\n this.device.setSpectorMetadata(this.handle, { ...this.props, data: typeof this.props.data }); // {name: this.props.id};\n this.glFormat = 6408;\n this.target = getWebGLTextureTarget(this.props);\n // Program.draw() checks the loaded flag of all textures\n this.loaded = false;\n // Signature: new Texture2D(gl, {data: url})\n if (typeof this.props?.data === 'string') {\n Object.assign(this.props, { data: loadImage(this.props.data) });\n }\n this.initialize(this.props);\n Object.seal(this);\n }\n destroy() {\n if (this.handle) {\n this.gl.deleteTexture(this.handle);\n this.removeStats();\n this.trackDeallocatedMemory('Texture');\n // this.handle = null;\n this.destroyed = true;\n }\n }\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n createView(props) {\n return new WEBGLTextureView(this.device, { ...props, texture: this });\n }\n // eslint-disable-next-line max-statements\n initialize(props = {}) {\n // Cube textures\n if (this.props.dimension === 'cube') {\n return this.initializeCube(props);\n }\n let data = props.data;\n if (data instanceof Promise) {\n data.then(resolvedImageData => this.initialize(Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })));\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-expect-error\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n // @ts-expect-error\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n const { parameters = {} } = props;\n const { pixels = null, pixelStore = {}, textureUnit = undefined, mipmaps = true } = props;\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n let { width, height, dataFormat, type, compressed = false } = props;\n const { depth = 0 } = props;\n const glFormat = convertTextureFormatToGL(props.format);\n // Deduce width and height\n ({ width, height, compressed, dataFormat, type } = this._deduceParameters({\n format: props.format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n // Store opts for accessors\n this.width = width;\n this.height = height;\n // this.depth = depth;\n this.glFormat = glFormat;\n this.type = type;\n this.dataFormat = dataFormat;\n this.textureUnit = textureUnit;\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(33984 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n this.mipmaps = mipmaps;\n this.setImageData({\n data,\n width,\n height,\n depth,\n format: glFormat,\n type,\n dataFormat,\n // @ts-expect-error\n parameters: pixelStore,\n compressed\n });\n // Set texture sampler parameters\n this.setSampler(props.sampler);\n this._setSamplerParameters(parameters);\n this.view = this.createView({ ...this.props, mipLevelCount: 1, arrayLayerCount: 1 });\n if (mipmaps && this.device.isTextureFormatFilterable(props.format)) {\n this.generateMipmap();\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-expect-error\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n return this;\n }\n initializeCube(props) {\n const { mipmaps = true, parameters = {} } = props;\n // Store props for accessors\n // this.props = props;\n // @ts-expect-error\n this.setCubeMapImageData(props).then(() => {\n this.loaded = true;\n // TODO - should genMipmap() be called on the cubemap or on the faces?\n // TODO - without generateMipmap() cube textures do not work at all!!! Why?\n if (mipmaps) {\n this.generateMipmap(props);\n }\n this.setSampler(props.sampler);\n this._setSamplerParameters(parameters);\n });\n return this;\n }\n setSampler(sampler = {}) {\n let samplerProps;\n if (sampler instanceof WEBGLSampler) {\n this.sampler = sampler;\n samplerProps = sampler.props;\n }\n else {\n this.sampler = new WEBGLSampler(this.device, sampler);\n samplerProps = sampler;\n }\n const parameters = convertSamplerParametersToWebGL(samplerProps);\n this._setSamplerParameters(parameters);\n return this;\n }\n /**\n * If size has changed, reinitializes with current format\n * @note note clears image and mipmaps\n */\n resize(options) {\n const { height, width, mipmaps = false } = options;\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n mipmaps\n });\n }\n return this;\n }\n /** Update external texture (video frame) */\n update() {\n if (this._video) {\n const { video, parameters, lastTime } = this._video;\n // @ts-expect-error\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n this.mipmaps = true;\n this.gl.bindTexture(this.target, this.handle);\n withGLParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param width -\n * @param height -\n * @param mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n // eslint-disable-next-line max-statements, complexity\n setImageData(options) {\n if (this.props.dimension === '3d' || this.props.dimension === '2d-array') {\n return this.setImageData3D(options);\n }\n this.trackDeallocatedMemory('Texture');\n const { target = this.target, pixels = null, level = 0, glFormat = this.glFormat, offset = 0, parameters = {} } = options;\n let { data = null, type = this.type, width = this.width, height = this.height, dataFormat = this.dataFormat, compressed = false } = options;\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n ({ type, dataFormat, compressed, width, height } = this._deduceParameters({\n format: this.props.format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n const { gl } = this;\n gl.bindTexture(this.target, this.handle);\n let dataType = null;\n ({ data, dataType } = this._getDataType({ data, compressed }));\n withGLParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, glFormat, width, height, 0 /* border*/, dataFormat, type, data);\n break;\n case 'typed-array':\n gl.texImage2D(target, level, glFormat, width, height, 0, // border (must be 0)\n dataFormat, type, data, offset);\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n this.device.gl.bindBuffer(35052, data.handle || data);\n this.device.gl.texImage2D(target, level, glFormat, width, height, 0 /* border*/, dataFormat, type, offset);\n this.device.gl.bindBuffer(35052, null);\n break;\n case 'browser-object':\n gl.texImage2D(target, level, glFormat, width, height, 0 /* border*/, dataFormat, type, data);\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(target, levelIndex, levelData.format, levelData.width, levelData.height, 0 /* border, must be 0 */, levelData.data);\n }\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n if (data && data.byteLength) {\n this.trackAllocatedMemory(data.byteLength, 'Texture');\n }\n else {\n const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);\n this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');\n }\n this.loaded = true;\n return this;\n }\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n * Redefines an area of an existing texture\n */\n setSubImageData({ target = this.target, pixels = null, data = null, x = 0, y = 0, width = this.width, height = this.height, level = 0, glFormat = this.glFormat, type = this.type, dataFormat = this.dataFormat, compressed = false, offset = 0, parameters = {} }) {\n ({ type, dataFormat, compressed, width, height } = this._deduceParameters({\n format: this.props.format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n assert(this.depth === 1, 'texSubImage not supported for 3D textures');\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n // Support buffers\n if (data instanceof WEBGLBuffer) {\n data = data.handle;\n }\n this.gl.bindTexture(this.target, this.handle);\n withGLParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, glFormat, data);\n }\n else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n }\n else if (ArrayBuffer.isView(data)) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n }\n else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n this.device.gl.bindBuffer(35052, data);\n this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n this.device.gl.bindBuffer(35052, null);\n }\n else {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n }\n });\n this.gl.bindTexture(this.target, null);\n }\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error('Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})')();\n return null;\n }\n getActiveUnit() {\n return this.gl.getParameter(34016) - 33984;\n }\n bind(textureUnit = this.textureUnit) {\n const { gl } = this;\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(33984 + textureUnit);\n }\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n unbind(textureUnit = this.textureUnit) {\n const { gl } = this;\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(33984 + textureUnit);\n }\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n // PRIVATE METHODS\n _getDataType({ data, compressed = false }) {\n if (compressed) {\n return { data, dataType: 'compressed' };\n }\n if (data === null) {\n return { data, dataType: 'null' };\n }\n if (ArrayBuffer.isView(data)) {\n return { data, dataType: 'typed-array' };\n }\n if (data instanceof WEBGLBuffer) {\n return { data: data.handle, dataType: 'buffer' };\n }\n // Raw WebGL handle (not a luma wrapper)\n if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {\n return { data, dataType: 'buffer' };\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return { data, dataType: 'browser-object' };\n }\n // HELPER METHODS\n _deduceParameters(opts) {\n const { format, data } = opts;\n let { width, height, dataFormat, type, compressed } = opts;\n // Deduce format and type from format\n const parameters = getWebGLTextureParameters(format);\n dataFormat = dataFormat || parameters.dataFormat;\n type = type || parameters.type;\n compressed = compressed || parameters.compressed;\n ({ width, height } = this._deduceImageSize(data, width, height));\n return { dataFormat, type, compressed, width, height, format, data };\n }\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = { width: data.width, height: data.height };\n }\n else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = { width: data.naturalWidth, height: data.naturalHeight };\n }\n else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = { width: data.width, height: data.height };\n }\n else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = { width: data.width, height: data.height };\n }\n else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = { width: data.videoWidth, height: data.videoHeight };\n }\n else if (!data) {\n size = { width: width >= 0 ? width : 1, height: height >= 0 ? height : 1 };\n }\n else {\n size = { width, height };\n }\n assert(size, 'Could not deduced texture size');\n assert(width === undefined || size.width === width, 'Deduced texture width does not match supplied width');\n assert(height === undefined || size.height === height, 'Deduced texture height does not match supplied height');\n return size;\n }\n // CUBE MAP METHODS\n /* eslint-disable max-statements, max-len */\n async setCubeMapImageData(options) {\n const { gl } = this;\n const { width, height, pixels, data, format = 6408, type = 5121 } = options;\n const imageDataMap = pixels || data;\n // pixel data (imageDataMap) is an Object from Face to Image or Promise.\n // For example:\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : Image-or-Promise,\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : Image-or-Promise,\n // ... }\n // To provide multiple level-of-details (LODs) this can be Face to Array\n // of Image or Promise, like this\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // ... }\n const resolvedFaces = await Promise.all(WEBGLTexture.FACES.map(face => {\n const facePixels = imageDataMap[face];\n return Promise.all(Array.isArray(facePixels) ? facePixels : [facePixels]);\n }));\n this.bind();\n WEBGLTexture.FACES.forEach((face, index) => {\n if (resolvedFaces[index].length > 1 && this.props.mipmaps !== false) {\n // If the user provides multiple LODs, then automatic mipmap\n // generation generateMipmap() should be disabled to avoid overwritting them.\n log.warn(`${this.id} has mipmap and multiple LODs.`)();\n }\n resolvedFaces[index].forEach((image, lodLevel) => {\n // TODO: adjust width & height for LOD!\n if (width && height) {\n gl.texImage2D(face, lodLevel, format, width, height, 0 /* border*/, format, type, image);\n }\n else {\n gl.texImage2D(face, lodLevel, format, format, type, image);\n }\n });\n });\n this.unbind();\n }\n /** @todo update this method to accept LODs */\n setImageDataForFace(options) {\n const { face, width, height, pixels, data, format = 6408, type = 5121\n // generateMipmap = false // TODO\n } = options;\n const { gl } = this;\n const imageData = pixels || data;\n this.bind();\n if (imageData instanceof Promise) {\n imageData.then(resolvedImageData => this.setImageDataForFace(Object.assign({}, options, {\n face,\n data: resolvedImageData,\n pixels: resolvedImageData\n })));\n }\n else if (this.width || this.height) {\n gl.texImage2D(face, 0, format, width, height, 0 /* border*/, format, type, imageData);\n }\n else {\n gl.texImage2D(face, 0, format, format, type, imageData);\n }\n return this;\n }\n /** Image 3D copies from Typed Array or WebGLBuffer */\n setImageData3D(options) {\n const { level = 0, dataFormat, format, type, // = GL.UNSIGNED_BYTE,\n width, height, depth = 1, offset = 0, data, parameters = {} } = options;\n this.trackDeallocatedMemory('Texture');\n this.gl.bindTexture(this.target, this.handle);\n const webglTextureFormat = getWebGLTextureParameters(format);\n withGLParameters(this.gl, parameters, () => {\n if (ArrayBuffer.isView(data)) {\n this.gl.texImage3D(this.target, level, webglTextureFormat.format, width, height, depth, 0 /* border, must be 0 */, webglTextureFormat.dataFormat, webglTextureFormat.type, // dataType: getWebGL,\n data);\n }\n if (data instanceof WEBGLBuffer) {\n this.gl.bindBuffer(35052, data.handle);\n this.gl.texImage3D(this.target, level, dataFormat, width, height, depth, 0 /* border, must be 0 */, format, type, offset);\n }\n });\n if (data && data.byteLength) {\n this.trackAllocatedMemory(data.byteLength, 'Texture');\n }\n else {\n const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);\n this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');\n }\n this.loaded = true;\n return this;\n }\n // RESOURCE METHODS\n /**\n * Sets sampler parameters on texture\n */\n _setSamplerParameters(parameters) {\n // NPOT parameters may populate an empty object\n if (isObjectEmpty(parameters)) {\n return;\n }\n logParameters(parameters);\n this.gl.bindTexture(this.target, this.handle);\n for (const [pname, pvalue] of Object.entries(parameters)) {\n const param = Number(pname);\n const value = pvalue;\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (param) {\n case 33082:\n case 33083:\n this.gl.texParameterf(this.target, param, value);\n break;\n default:\n this.gl.texParameteri(this.target, param, value);\n break;\n }\n }\n this.gl.bindTexture(this.target, null);\n return;\n }\n}\n// HELPERS\nfunction getWebGLTextureTarget(props) {\n switch (props.dimension) {\n // supported in WebGL\n case '2d':\n return 3553;\n case 'cube':\n return 34067;\n // supported in WebGL2\n case '2d-array':\n return 35866;\n case '3d':\n return 32879;\n // not supported in any WebGL version\n case '1d':\n case 'cube-array':\n default:\n throw new Error(props.dimension);\n }\n}\nfunction logParameters(parameters) {\n log.log(1, 'texture sampler parameters', parameters)();\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Framebuffer, assert } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { WEBGLTexture } from \"./webgl-texture.js\";\nimport { WEBGLTextureView } from \"./webgl-texture-view.js\";\nimport { getDepthStencilAttachmentWebGL } from \"../converters/texture-formats.js\";\n/** luma.gl Framebuffer, WebGL implementation */\nexport class WEBGLFramebuffer extends Framebuffer {\n device;\n gl;\n handle;\n get texture() {\n return this.colorAttachments[0];\n }\n constructor(device, props) {\n super(device, props);\n // WebGL default framebuffer handle is null\n const isDefaultFramebuffer = props.handle === null;\n this.device = device;\n this.gl = device.gl;\n this.handle =\n this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();\n if (!isDefaultFramebuffer) {\n // default framebuffer handle is null, so we can't set spector metadata...\n device.setSpectorMetadata(this.handle, { id: this.props.id, props: this.props });\n // Auto create textures for attachments if needed\n this.autoCreateAttachmentTextures();\n /** Attach from a map of attachments */\n // @ts-expect-error native bindFramebuffer is overridden by our state tracker\n const prevHandle = this.gl.bindFramebuffer(36160, this.handle);\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = 36064 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n if (this.depthStencilAttachment) {\n this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.props.format), this.depthStencilAttachment);\n }\n /** Check the status */\n // @ts-expect-error\n if (props.check !== false) {\n const status = this.gl.checkFramebufferStatus(36160);\n if (status !== 36053) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n this.gl.bindFramebuffer(36160, prevHandle);\n }\n }\n /** destroys any auto created resources etc. */\n destroy() {\n super.destroy(); // destroys owned resources etc.\n if (!this.destroyed && this.handle !== null) {\n this.gl.deleteFramebuffer(this.handle);\n // this.handle = null;\n }\n }\n // PRIVATE\n /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */\n createDepthStencilTexture(format) {\n // return new WEBGLRenderbuffer(this.device, {\n return new WEBGLTexture(this.device, {\n id: `${this.id}-depth-stencil`,\n format,\n width: this.width,\n height: this.height,\n mipmaps: false\n });\n }\n /**\n * Attachment resize is expected to be a noop if size is same\n */\n resizeAttachments(width, height) {\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n // assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n // TODO Not clear that this is better than default destroy/create implementation\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.texture.resize({ width, height });\n }\n if (this.depthStencilAttachment) {\n this.depthStencilAttachment.texture.resize({ width, height });\n }\n return this;\n }\n /** Attach one attachment */\n _attachOne(attachmentPoint, attachment) {\n // if (attachment instanceof WEBGLRenderbuffer) {\n // this._attachWEBGLRenderbuffer(attachmentPoint, attachment);\n // return attachment;\n // }\n if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture, layer, level);\n return texture;\n }\n if (attachment instanceof WEBGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n if (attachment instanceof WEBGLTextureView) {\n const textureView = attachment;\n this._attachTexture(attachmentPoint, textureView.texture, textureView.props.baseMipLevel, textureView.props.baseArrayLayer);\n return attachment.texture;\n }\n throw new Error('attach');\n }\n // TODO - we do not seem to need render buffers in WebGL 2\n // protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {\n // this.gl.framebufferRenderbuffer(\n // GL.FRAMEBUFFER,\n // attachment,\n // GL.RENDERBUFFER,\n // renderbuffer.handle\n // );\n // }\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel\n */\n _attachTexture(attachment, texture, layer, level) {\n const { gl } = this.device;\n gl.bindTexture(texture.target, texture.handle);\n switch (texture.target) {\n case 35866:\n case 32879:\n gl.framebufferTextureLayer(36160, attachment, texture.target, level, layer);\n break;\n case 34067:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(36160, attachment, face, texture.handle, level);\n break;\n case 3553:\n gl.framebufferTexture2D(36160, attachment, 3553, texture.handle, level);\n break;\n default:\n assert(false, 'Illegal texture type');\n }\n gl.bindTexture(texture.target, null);\n }\n}\n// Helper functions\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < 34069\n ? layer + 34069\n : layer;\n}\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n switch (status) {\n case 36053:\n return 'success';\n case 36054:\n return 'Mismatched attachments';\n case 36055:\n return 'No attachments';\n case 36057:\n return 'Height/width mismatch';\n case 36061:\n return 'Unsupported or split attachments';\n // WebGL2\n case 36182:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CanvasContext } from '@luma.gl/core';\nimport { WEBGLFramebuffer } from \"./resources/webgl-framebuffer.js\";\n/**\n * A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc\n */\nexport class WebGLCanvasContext extends CanvasContext {\n device;\n presentationSize;\n _framebuffer = null;\n constructor(device, props) {\n // Note: Base class creates / looks up the canvas (unless under Node.js)\n super(props);\n this.device = device;\n this.presentationSize = [-1, -1];\n this._setAutoCreatedCanvasId(`${this.device.id}-canvas`);\n this.update();\n }\n getCurrentFramebuffer() {\n this.update();\n // Setting handle to null returns a reference to the default framebuffer\n this._framebuffer = this._framebuffer || new WEBGLFramebuffer(this.device, { handle: null });\n return this._framebuffer;\n }\n /** Resizes and updates render targets if necessary */\n update() {\n const size = this.getPixelSize();\n const sizeChanged = size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];\n if (sizeChanged) {\n this.presentationSize = size;\n this.resize();\n }\n }\n /**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n */\n resize(options) {\n if (!this.device.gl)\n return;\n // Resize browser context .\n if (this.canvas) {\n const devicePixelRatio = this.getDevicePixelRatio(options?.useDevicePixels);\n this.setDevicePixelRatio(devicePixelRatio, options);\n return;\n }\n }\n commit() {\n // gl.commit was ultimately removed from the WebGL standard??\n // if (this.offScreen && this.gl.commit) {\n // // @ts-expect-error gl.commit is not officially part of WebGL2RenderingContext\n // this.gl.commit();\n // }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log, loadScript } from '@luma.gl/core';\nconst DEFAULT_SPECTOR_PROPS = {\n spector: log.get('spector') || log.get('spectorjs')\n};\n// https://github.com/BabylonJS/Spector.js#basic-usage\nconst SPECTOR_CDN_URL = 'https://cdn.jsdelivr.net/npm/spectorjs@0.9.30/dist/spector.bundle.js';\nconst LOG_LEVEL = 1;\nlet spector = null;\nlet initialized = false;\n/** Loads spector from CDN if not already installed */\nexport async function loadSpectorJS(props) {\n if (!globalThis.SPECTOR) {\n try {\n await loadScript(SPECTOR_CDN_URL);\n }\n catch (error) {\n log.warn(String(error));\n }\n }\n}\nexport function initializeSpectorJS(props) {\n props = { ...DEFAULT_SPECTOR_PROPS, ...props };\n if (!props?.spector) {\n return null;\n }\n if (!spector && globalThis.SPECTOR) {\n log.probe(LOG_LEVEL, 'SPECTOR found and initialized')();\n spector = new globalThis.SPECTOR.Spector();\n if (globalThis.luma) {\n globalThis.luma.spector = spector;\n }\n }\n if (!spector) {\n return null;\n }\n if (!initialized) {\n initialized = true;\n // enables recording some extra information merged in the capture like texture memory sizes and formats\n spector.spyCanvases();\n // A callback when results are ready\n spector?.onCaptureStarted.add((capture) => log.info('Spector capture started:', capture)());\n spector?.onCapture.add((capture) => {\n log.info('Spector capture complete:', capture)();\n // Use undocumented Spector API to open the UI with our capture\n // See https://github.com/BabylonJS/Spector.js/blob/767ad1195a25b85a85c381f400eb50a979239eca/src/spector.ts#L124\n spector?.getResultUI();\n spector?.resultView.display();\n spector?.resultView.addCapture(capture);\n });\n }\n if (props?.canvas) {\n // @ts-expect-error If spector is specified as a canvas id, only monitor that canvas\n if (typeof props.spector === 'string' && props.spector !== props.canvas.id) {\n return spector;\n }\n // capture startup\n // spector?.captureCanvas(props?.canvas);\n spector?.startCapture(props?.canvas, 500); // 500 commands\n new Promise(resolve => setTimeout(resolve, 2000)).then(_ => {\n log.info('Spector capture stopped after 2 seconds')();\n spector?.stopCapture();\n // spector?.displayUI();\n });\n }\n return spector;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable key-spacing, max-len, no-inline-comments, camelcase */\n/**\n * Standard WebGL, WebGL2 and extension constants (OpenGL constants)\n * @note (Most) of these constants are also defined on the WebGLRenderingContext interface.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants\n * @privateRemarks Locally called `GLEnum` instead of `GL`, because `babel-plugin-inline-webl-constants`\n * both depends on and processes this module, but shouldn't replace these declarations.\n */\nvar GLEnum;\n(function (GLEnum) {\n // Clearing buffers\n // Constants passed to clear() to clear buffer masks.\n /** Passed to clear to clear the current depth buffer. */\n GLEnum[GLEnum[\"DEPTH_BUFFER_BIT\"] = 256] = \"DEPTH_BUFFER_BIT\";\n /** Passed to clear to clear the current stencil buffer. */\n GLEnum[GLEnum[\"STENCIL_BUFFER_BIT\"] = 1024] = \"STENCIL_BUFFER_BIT\";\n /** Passed to clear to clear the current color buffer. */\n GLEnum[GLEnum[\"COLOR_BUFFER_BIT\"] = 16384] = \"COLOR_BUFFER_BIT\";\n // Rendering primitives\n // Constants passed to drawElements() or drawArrays() to specify what kind of primitive to render.\n /** Passed to drawElements or drawArrays to draw single points. */\n GLEnum[GLEnum[\"POINTS\"] = 0] = \"POINTS\";\n /** Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it. */\n GLEnum[GLEnum[\"LINES\"] = 1] = \"LINES\";\n /** Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment. */\n GLEnum[GLEnum[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n /** Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last. */\n GLEnum[GLEnum[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n /** Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle. */\n GLEnum[GLEnum[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n /** Passed to drawElements or drawArrays to draw a connected group of triangles. */\n GLEnum[GLEnum[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n /** Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan. */\n GLEnum[GLEnum[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n // Blending modes\n // Constants passed to blendFunc() or blendFuncSeparate() to specify the blending mode (for both, RBG and alpha, or separately).\n /** Passed to blendFunc or blendFuncSeparate to turn off a component. */\n GLEnum[GLEnum[\"ZERO\"] = 0] = \"ZERO\";\n /** Passed to blendFunc or blendFuncSeparate to turn on a component. */\n GLEnum[GLEnum[\"ONE\"] = 1] = \"ONE\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color. */\n GLEnum[GLEnum[\"SRC_COLOR\"] = 768] = \"SRC_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color. */\n GLEnum[GLEnum[\"ONE_MINUS_SRC_COLOR\"] = 769] = \"ONE_MINUS_SRC_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha. */\n GLEnum[GLEnum[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha. */\n GLEnum[GLEnum[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha. */\n GLEnum[GLEnum[\"DST_ALPHA\"] = 772] = \"DST_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha. */\n GLEnum[GLEnum[\"ONE_MINUS_DST_ALPHA\"] = 773] = \"ONE_MINUS_DST_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color. */\n GLEnum[GLEnum[\"DST_COLOR\"] = 774] = \"DST_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color. */\n GLEnum[GLEnum[\"ONE_MINUS_DST_COLOR\"] = 775] = \"ONE_MINUS_DST_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha. */\n GLEnum[GLEnum[\"SRC_ALPHA_SATURATE\"] = 776] = \"SRC_ALPHA_SATURATE\";\n /** Passed to blendFunc or blendFuncSeparate to specify a constant color blend function. */\n GLEnum[GLEnum[\"CONSTANT_COLOR\"] = 32769] = \"CONSTANT_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function. */\n GLEnum[GLEnum[\"ONE_MINUS_CONSTANT_COLOR\"] = 32770] = \"ONE_MINUS_CONSTANT_COLOR\";\n /** Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function. */\n GLEnum[GLEnum[\"CONSTANT_ALPHA\"] = 32771] = \"CONSTANT_ALPHA\";\n /** Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function. */\n GLEnum[GLEnum[\"ONE_MINUS_CONSTANT_ALPHA\"] = 32772] = \"ONE_MINUS_CONSTANT_ALPHA\";\n // Blending equations\n // Constants passed to blendEquation() or blendEquationSeparate() to control\n // how the blending is calculated (for both, RBG and alpha, or separately).\n /** Passed to blendEquation or blendEquationSeparate to set an addition blend function. */\n /** Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination). */\n /** Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source). */\n GLEnum[GLEnum[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n GLEnum[GLEnum[\"FUNC_SUBTRACT\"] = 32778] = \"FUNC_SUBTRACT\";\n GLEnum[GLEnum[\"FUNC_REVERSE_SUBTRACT\"] = 32779] = \"FUNC_REVERSE_SUBTRACT\";\n // Getting GL parameter information\n // Constants passed to getParameter() to specify what information to return.\n /** Passed to getParameter to get the current RGB blend function. */\n GLEnum[GLEnum[\"BLEND_EQUATION\"] = 32777] = \"BLEND_EQUATION\";\n /** Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION */\n GLEnum[GLEnum[\"BLEND_EQUATION_RGB\"] = 32777] = \"BLEND_EQUATION_RGB\";\n /** Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION */\n GLEnum[GLEnum[\"BLEND_EQUATION_ALPHA\"] = 34877] = \"BLEND_EQUATION_ALPHA\";\n /** Passed to getParameter to get the current destination RGB blend function. */\n GLEnum[GLEnum[\"BLEND_DST_RGB\"] = 32968] = \"BLEND_DST_RGB\";\n /** Passed to getParameter to get the current destination RGB blend function. */\n GLEnum[GLEnum[\"BLEND_SRC_RGB\"] = 32969] = \"BLEND_SRC_RGB\";\n /** Passed to getParameter to get the current destination alpha blend function. */\n GLEnum[GLEnum[\"BLEND_DST_ALPHA\"] = 32970] = \"BLEND_DST_ALPHA\";\n /** Passed to getParameter to get the current source alpha blend function. */\n GLEnum[GLEnum[\"BLEND_SRC_ALPHA\"] = 32971] = \"BLEND_SRC_ALPHA\";\n /** Passed to getParameter to return a the current blend color. */\n GLEnum[GLEnum[\"BLEND_COLOR\"] = 32773] = \"BLEND_COLOR\";\n /** Passed to getParameter to get the array buffer binding. */\n GLEnum[GLEnum[\"ARRAY_BUFFER_BINDING\"] = 34964] = \"ARRAY_BUFFER_BINDING\";\n /** Passed to getParameter to get the current element array buffer. */\n GLEnum[GLEnum[\"ELEMENT_ARRAY_BUFFER_BINDING\"] = 34965] = \"ELEMENT_ARRAY_BUFFER_BINDING\";\n /** Passed to getParameter to get the current lineWidth (set by the lineWidth method). */\n GLEnum[GLEnum[\"LINE_WIDTH\"] = 2849] = \"LINE_WIDTH\";\n /** Passed to getParameter to get the current size of a point drawn with gl.POINTS */\n GLEnum[GLEnum[\"ALIASED_POINT_SIZE_RANGE\"] = 33901] = \"ALIASED_POINT_SIZE_RANGE\";\n /** Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1. */\n GLEnum[GLEnum[\"ALIASED_LINE_WIDTH_RANGE\"] = 33902] = \"ALIASED_LINE_WIDTH_RANGE\";\n /** Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK */\n GLEnum[GLEnum[\"CULL_FACE_MODE\"] = 2885] = \"CULL_FACE_MODE\";\n /** Passed to getParameter to determine the current value of frontFace. Should return CW or CCW. */\n GLEnum[GLEnum[\"FRONT_FACE\"] = 2886] = \"FRONT_FACE\";\n /** Passed to getParameter to return a length-2 array of floats giving the current depth range. */\n GLEnum[GLEnum[\"DEPTH_RANGE\"] = 2928] = \"DEPTH_RANGE\";\n /** Passed to getParameter to determine if the depth write mask is enabled. */\n GLEnum[GLEnum[\"DEPTH_WRITEMASK\"] = 2930] = \"DEPTH_WRITEMASK\";\n /** Passed to getParameter to determine the current depth clear value. */\n GLEnum[GLEnum[\"DEPTH_CLEAR_VALUE\"] = 2931] = \"DEPTH_CLEAR_VALUE\";\n /** Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL. */\n GLEnum[GLEnum[\"DEPTH_FUNC\"] = 2932] = \"DEPTH_FUNC\";\n /** Passed to getParameter to get the value the stencil will be cleared to. */\n GLEnum[GLEnum[\"STENCIL_CLEAR_VALUE\"] = 2961] = \"STENCIL_CLEAR_VALUE\";\n /** Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL. */\n GLEnum[GLEnum[\"STENCIL_FUNC\"] = 2962] = \"STENCIL_FUNC\";\n /** Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_FAIL\"] = 2964] = \"STENCIL_FAIL\";\n /** Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_PASS_DEPTH_FAIL\"] = 2965] = \"STENCIL_PASS_DEPTH_FAIL\";\n /** Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP. */\n GLEnum[GLEnum[\"STENCIL_PASS_DEPTH_PASS\"] = 2966] = \"STENCIL_PASS_DEPTH_PASS\";\n /** Passed to getParameter to get the reference value used for stencil tests. */\n GLEnum[GLEnum[\"STENCIL_REF\"] = 2967] = \"STENCIL_REF\";\n GLEnum[GLEnum[\"STENCIL_VALUE_MASK\"] = 2963] = \"STENCIL_VALUE_MASK\";\n GLEnum[GLEnum[\"STENCIL_WRITEMASK\"] = 2968] = \"STENCIL_WRITEMASK\";\n GLEnum[GLEnum[\"STENCIL_BACK_FUNC\"] = 34816] = \"STENCIL_BACK_FUNC\";\n GLEnum[GLEnum[\"STENCIL_BACK_FAIL\"] = 34817] = \"STENCIL_BACK_FAIL\";\n GLEnum[GLEnum[\"STENCIL_BACK_PASS_DEPTH_FAIL\"] = 34818] = \"STENCIL_BACK_PASS_DEPTH_FAIL\";\n GLEnum[GLEnum[\"STENCIL_BACK_PASS_DEPTH_PASS\"] = 34819] = \"STENCIL_BACK_PASS_DEPTH_PASS\";\n GLEnum[GLEnum[\"STENCIL_BACK_REF\"] = 36003] = \"STENCIL_BACK_REF\";\n GLEnum[GLEnum[\"STENCIL_BACK_VALUE_MASK\"] = 36004] = \"STENCIL_BACK_VALUE_MASK\";\n GLEnum[GLEnum[\"STENCIL_BACK_WRITEMASK\"] = 36005] = \"STENCIL_BACK_WRITEMASK\";\n /** An Int32Array with four elements for the current viewport dimensions. */\n GLEnum[GLEnum[\"VIEWPORT\"] = 2978] = \"VIEWPORT\";\n /** An Int32Array with four elements for the current scissor box dimensions. */\n GLEnum[GLEnum[\"SCISSOR_BOX\"] = 3088] = \"SCISSOR_BOX\";\n GLEnum[GLEnum[\"COLOR_CLEAR_VALUE\"] = 3106] = \"COLOR_CLEAR_VALUE\";\n GLEnum[GLEnum[\"COLOR_WRITEMASK\"] = 3107] = \"COLOR_WRITEMASK\";\n GLEnum[GLEnum[\"UNPACK_ALIGNMENT\"] = 3317] = \"UNPACK_ALIGNMENT\";\n GLEnum[GLEnum[\"PACK_ALIGNMENT\"] = 3333] = \"PACK_ALIGNMENT\";\n GLEnum[GLEnum[\"MAX_TEXTURE_SIZE\"] = 3379] = \"MAX_TEXTURE_SIZE\";\n GLEnum[GLEnum[\"MAX_VIEWPORT_DIMS\"] = 3386] = \"MAX_VIEWPORT_DIMS\";\n GLEnum[GLEnum[\"SUBPIXEL_BITS\"] = 3408] = \"SUBPIXEL_BITS\";\n GLEnum[GLEnum[\"RED_BITS\"] = 3410] = \"RED_BITS\";\n GLEnum[GLEnum[\"GREEN_BITS\"] = 3411] = \"GREEN_BITS\";\n GLEnum[GLEnum[\"BLUE_BITS\"] = 3412] = \"BLUE_BITS\";\n GLEnum[GLEnum[\"ALPHA_BITS\"] = 3413] = \"ALPHA_BITS\";\n GLEnum[GLEnum[\"DEPTH_BITS\"] = 3414] = \"DEPTH_BITS\";\n GLEnum[GLEnum[\"STENCIL_BITS\"] = 3415] = \"STENCIL_BITS\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_UNITS\"] = 10752] = \"POLYGON_OFFSET_UNITS\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_FACTOR\"] = 32824] = \"POLYGON_OFFSET_FACTOR\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_2D\"] = 32873] = \"TEXTURE_BINDING_2D\";\n GLEnum[GLEnum[\"SAMPLE_BUFFERS\"] = 32936] = \"SAMPLE_BUFFERS\";\n GLEnum[GLEnum[\"SAMPLES\"] = 32937] = \"SAMPLES\";\n GLEnum[GLEnum[\"SAMPLE_COVERAGE_VALUE\"] = 32938] = \"SAMPLE_COVERAGE_VALUE\";\n GLEnum[GLEnum[\"SAMPLE_COVERAGE_INVERT\"] = 32939] = \"SAMPLE_COVERAGE_INVERT\";\n GLEnum[GLEnum[\"COMPRESSED_TEXTURE_FORMATS\"] = 34467] = \"COMPRESSED_TEXTURE_FORMATS\";\n GLEnum[GLEnum[\"VENDOR\"] = 7936] = \"VENDOR\";\n GLEnum[GLEnum[\"RENDERER\"] = 7937] = \"RENDERER\";\n GLEnum[GLEnum[\"VERSION\"] = 7938] = \"VERSION\";\n GLEnum[GLEnum[\"IMPLEMENTATION_COLOR_READ_TYPE\"] = 35738] = \"IMPLEMENTATION_COLOR_READ_TYPE\";\n GLEnum[GLEnum[\"IMPLEMENTATION_COLOR_READ_FORMAT\"] = 35739] = \"IMPLEMENTATION_COLOR_READ_FORMAT\";\n GLEnum[GLEnum[\"BROWSER_DEFAULT_WEBGL\"] = 37444] = \"BROWSER_DEFAULT_WEBGL\";\n // Buffers\n // Constants passed to bufferData(), bufferSubData(), bindBuffer(), or\n // getBufferParameter().\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often. */\n GLEnum[GLEnum[\"STATIC_DRAW\"] = 35044] = \"STATIC_DRAW\";\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often. */\n GLEnum[GLEnum[\"STREAM_DRAW\"] = 35040] = \"STREAM_DRAW\";\n /** Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often. */\n GLEnum[GLEnum[\"DYNAMIC_DRAW\"] = 35048] = \"DYNAMIC_DRAW\";\n /** Passed to bindBuffer or bufferData to specify the type of buffer being used. */\n GLEnum[GLEnum[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n /** Passed to bindBuffer or bufferData to specify the type of buffer being used. */\n GLEnum[GLEnum[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n /** Passed to getBufferParameter to get a buffer's size. */\n GLEnum[GLEnum[\"BUFFER_SIZE\"] = 34660] = \"BUFFER_SIZE\";\n /** Passed to getBufferParameter to get the hint for the buffer passed in when it was created. */\n GLEnum[GLEnum[\"BUFFER_USAGE\"] = 34661] = \"BUFFER_USAGE\";\n // Vertex attributes\n // Constants passed to getVertexAttrib().\n /** Passed to getVertexAttrib to read back the current vertex attribute. */\n GLEnum[GLEnum[\"CURRENT_VERTEX_ATTRIB\"] = 34342] = \"CURRENT_VERTEX_ATTRIB\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_ENABLED\"] = 34338] = \"VERTEX_ATTRIB_ARRAY_ENABLED\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_SIZE\"] = 34339] = \"VERTEX_ATTRIB_ARRAY_SIZE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_STRIDE\"] = 34340] = \"VERTEX_ATTRIB_ARRAY_STRIDE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_TYPE\"] = 34341] = \"VERTEX_ATTRIB_ARRAY_TYPE\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_NORMALIZED\"] = 34922] = \"VERTEX_ATTRIB_ARRAY_NORMALIZED\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_POINTER\"] = 34373] = \"VERTEX_ATTRIB_ARRAY_POINTER\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\"] = 34975] = \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\";\n // Culling\n // Constants passed to cullFace().\n /** Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method. */\n GLEnum[GLEnum[\"CULL_FACE\"] = 2884] = \"CULL_FACE\";\n /** Passed to cullFace to specify that only front faces should be culled. */\n GLEnum[GLEnum[\"FRONT\"] = 1028] = \"FRONT\";\n /** Passed to cullFace to specify that only back faces should be culled. */\n GLEnum[GLEnum[\"BACK\"] = 1029] = \"BACK\";\n /** Passed to cullFace to specify that front and back faces should be culled. */\n GLEnum[GLEnum[\"FRONT_AND_BACK\"] = 1032] = \"FRONT_AND_BACK\";\n // Enabling and disabling\n // Constants passed to enable() or disable().\n /** Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method. */\n GLEnum[GLEnum[\"BLEND\"] = 3042] = \"BLEND\";\n /** Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test. */\n GLEnum[GLEnum[\"DEPTH_TEST\"] = 2929] = \"DEPTH_TEST\";\n /** Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method. */\n GLEnum[GLEnum[\"DITHER\"] = 3024] = \"DITHER\";\n /** Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test. */\n GLEnum[GLEnum[\"POLYGON_OFFSET_FILL\"] = 32823] = \"POLYGON_OFFSET_FILL\";\n /** Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels. */\n GLEnum[GLEnum[\"SAMPLE_ALPHA_TO_COVERAGE\"] = 32926] = \"SAMPLE_ALPHA_TO_COVERAGE\";\n /** Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling. */\n GLEnum[GLEnum[\"SAMPLE_COVERAGE\"] = 32928] = \"SAMPLE_COVERAGE\";\n /** Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test. */\n GLEnum[GLEnum[\"SCISSOR_TEST\"] = 3089] = \"SCISSOR_TEST\";\n /** Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test. */\n GLEnum[GLEnum[\"STENCIL_TEST\"] = 2960] = \"STENCIL_TEST\";\n // Errors\n // Constants returned from getError().\n /** Returned from getError(). */\n GLEnum[GLEnum[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_ENUM\"] = 1280] = \"INVALID_ENUM\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_VALUE\"] = 1281] = \"INVALID_VALUE\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"INVALID_OPERATION\"] = 1282] = \"INVALID_OPERATION\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"OUT_OF_MEMORY\"] = 1285] = \"OUT_OF_MEMORY\";\n /** Returned from getError(). */\n GLEnum[GLEnum[\"CONTEXT_LOST_WEBGL\"] = 37442] = \"CONTEXT_LOST_WEBGL\";\n // Front face directions\n // Constants passed to frontFace().\n /** Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction */\n GLEnum[GLEnum[\"CW\"] = 2304] = \"CW\";\n /** Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction */\n GLEnum[GLEnum[\"CCW\"] = 2305] = \"CCW\";\n // Hints\n // Constants passed to hint()\n /** There is no preference for this behavior. */\n GLEnum[GLEnum[\"DONT_CARE\"] = 4352] = \"DONT_CARE\";\n /** The most efficient behavior should be used. */\n GLEnum[GLEnum[\"FASTEST\"] = 4353] = \"FASTEST\";\n /** The most correct or the highest quality option should be used. */\n GLEnum[GLEnum[\"NICEST\"] = 4354] = \"NICEST\";\n /** Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap(). */\n GLEnum[GLEnum[\"GENERATE_MIPMAP_HINT\"] = 33170] = \"GENERATE_MIPMAP_HINT\";\n // Data types\n GLEnum[GLEnum[\"BYTE\"] = 5120] = \"BYTE\";\n GLEnum[GLEnum[\"UNSIGNED_BYTE\"] = 5121] = \"UNSIGNED_BYTE\";\n GLEnum[GLEnum[\"SHORT\"] = 5122] = \"SHORT\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT\"] = 5123] = \"UNSIGNED_SHORT\";\n GLEnum[GLEnum[\"INT\"] = 5124] = \"INT\";\n GLEnum[GLEnum[\"UNSIGNED_INT\"] = 5125] = \"UNSIGNED_INT\";\n GLEnum[GLEnum[\"FLOAT\"] = 5126] = \"FLOAT\";\n GLEnum[GLEnum[\"DOUBLE\"] = 5130] = \"DOUBLE\";\n // Pixel formats\n GLEnum[GLEnum[\"DEPTH_COMPONENT\"] = 6402] = \"DEPTH_COMPONENT\";\n GLEnum[GLEnum[\"ALPHA\"] = 6406] = \"ALPHA\";\n GLEnum[GLEnum[\"RGB\"] = 6407] = \"RGB\";\n GLEnum[GLEnum[\"RGBA\"] = 6408] = \"RGBA\";\n GLEnum[GLEnum[\"LUMINANCE\"] = 6409] = \"LUMINANCE\";\n GLEnum[GLEnum[\"LUMINANCE_ALPHA\"] = 6410] = \"LUMINANCE_ALPHA\";\n // Pixel types\n // UNSIGNED_BYTE = 0x1401,\n GLEnum[GLEnum[\"UNSIGNED_SHORT_4_4_4_4\"] = 32819] = \"UNSIGNED_SHORT_4_4_4_4\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT_5_5_5_1\"] = 32820] = \"UNSIGNED_SHORT_5_5_5_1\";\n GLEnum[GLEnum[\"UNSIGNED_SHORT_5_6_5\"] = 33635] = \"UNSIGNED_SHORT_5_6_5\";\n // Shaders\n // Constants passed to createShader() or getShaderParameter()\n /** Passed to createShader to define a fragment shader. */\n GLEnum[GLEnum[\"FRAGMENT_SHADER\"] = 35632] = \"FRAGMENT_SHADER\";\n /** Passed to createShader to define a vertex shader */\n GLEnum[GLEnum[\"VERTEX_SHADER\"] = 35633] = \"VERTEX_SHADER\";\n /** Passed to getShaderParameter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error */\n GLEnum[GLEnum[\"COMPILE_STATUS\"] = 35713] = \"COMPILE_STATUS\";\n /** Passed to getShaderParameter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise. */\n GLEnum[GLEnum[\"DELETE_STATUS\"] = 35712] = \"DELETE_STATUS\";\n /** Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error. */\n GLEnum[GLEnum[\"LINK_STATUS\"] = 35714] = \"LINK_STATUS\";\n /** Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found. */\n GLEnum[GLEnum[\"VALIDATE_STATUS\"] = 35715] = \"VALIDATE_STATUS\";\n /** Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred. */\n GLEnum[GLEnum[\"ATTACHED_SHADERS\"] = 35717] = \"ATTACHED_SHADERS\";\n /** Passed to getProgramParameter to get the number of attributes active in a program. */\n GLEnum[GLEnum[\"ACTIVE_ATTRIBUTES\"] = 35721] = \"ACTIVE_ATTRIBUTES\";\n /** Passed to getProgramParameter to get the number of uniforms active in a program. */\n GLEnum[GLEnum[\"ACTIVE_UNIFORMS\"] = 35718] = \"ACTIVE_UNIFORMS\";\n /** The maximum number of entries possible in the vertex attribute list. */\n GLEnum[GLEnum[\"MAX_VERTEX_ATTRIBS\"] = 34921] = \"MAX_VERTEX_ATTRIBS\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_VECTORS\"] = 36347] = \"MAX_VERTEX_UNIFORM_VECTORS\";\n GLEnum[GLEnum[\"MAX_VARYING_VECTORS\"] = 36348] = \"MAX_VARYING_VECTORS\";\n GLEnum[GLEnum[\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\"] = 35661] = \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\";\n GLEnum[GLEnum[\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\"] = 35660] = \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\";\n /** Implementation dependent number of maximum texture units. At least 8. */\n GLEnum[GLEnum[\"MAX_TEXTURE_IMAGE_UNITS\"] = 34930] = \"MAX_TEXTURE_IMAGE_UNITS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_VECTORS\"] = 36349] = \"MAX_FRAGMENT_UNIFORM_VECTORS\";\n GLEnum[GLEnum[\"SHADER_TYPE\"] = 35663] = \"SHADER_TYPE\";\n GLEnum[GLEnum[\"SHADING_LANGUAGE_VERSION\"] = 35724] = \"SHADING_LANGUAGE_VERSION\";\n GLEnum[GLEnum[\"CURRENT_PROGRAM\"] = 35725] = \"CURRENT_PROGRAM\";\n // Depth or stencil tests\n // Constants passed to depthFunc() or stencilFunc().\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass, i.e., nothing will be drawn. */\n GLEnum[GLEnum[\"NEVER\"] = 512] = \"NEVER\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value. */\n GLEnum[GLEnum[\"LESS\"] = 513] = \"LESS\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value. */\n GLEnum[GLEnum[\"EQUAL\"] = 514] = \"EQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value. */\n GLEnum[GLEnum[\"LEQUAL\"] = 515] = \"LEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value. */\n GLEnum[GLEnum[\"GREATER\"] = 516] = \"GREATER\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value. */\n GLEnum[GLEnum[\"NOTEQUAL\"] = 517] = \"NOTEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value. */\n GLEnum[GLEnum[\"GEQUAL\"] = 518] = \"GEQUAL\";\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass, i.e., pixels will be drawn in the order they are drawn. */\n GLEnum[GLEnum[\"ALWAYS\"] = 519] = \"ALWAYS\";\n // Stencil actions\n // Constants passed to stencilOp().\n GLEnum[GLEnum[\"KEEP\"] = 7680] = \"KEEP\";\n GLEnum[GLEnum[\"REPLACE\"] = 7681] = \"REPLACE\";\n GLEnum[GLEnum[\"INCR\"] = 7682] = \"INCR\";\n GLEnum[GLEnum[\"DECR\"] = 7683] = \"DECR\";\n GLEnum[GLEnum[\"INVERT\"] = 5386] = \"INVERT\";\n GLEnum[GLEnum[\"INCR_WRAP\"] = 34055] = \"INCR_WRAP\";\n GLEnum[GLEnum[\"DECR_WRAP\"] = 34056] = \"DECR_WRAP\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GLEnum[GLEnum[\"NEAREST\"] = 9728] = \"NEAREST\";\n GLEnum[GLEnum[\"LINEAR\"] = 9729] = \"LINEAR\";\n GLEnum[GLEnum[\"NEAREST_MIPMAP_NEAREST\"] = 9984] = \"NEAREST_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"NEAREST_MIPMAP_LINEAR\"] = 9986] = \"NEAREST_MIPMAP_LINEAR\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_LINEAR\"] = 9987] = \"LINEAR_MIPMAP_LINEAR\";\n /** The texture magnification function is used when the pixel being textured maps to an area less than or equal to one texture element. It sets the texture magnification function to either GL_NEAREST or GL_LINEAR (see below). GL_NEAREST is generally faster than GL_LINEAR, but it can produce textured images with sharper edges because the transition between texture elements is not as smooth. Default: GL_LINEAR. */\n GLEnum[GLEnum[\"TEXTURE_MAG_FILTER\"] = 10240] = \"TEXTURE_MAG_FILTER\";\n /** The texture minifying function is used whenever the pixel being textured maps to an area greater than one texture element. There are six defined minifying functions. Two of them use the nearest one or nearest four texture elements to compute the texture value. The other four use mipmaps. Default: GL_NEAREST_MIPMAP_LINEAR */\n GLEnum[GLEnum[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_S\"] = 10242] = \"TEXTURE_WRAP_S\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_T\"] = 10243] = \"TEXTURE_WRAP_T\";\n GLEnum[GLEnum[\"TEXTURE_2D\"] = 3553] = \"TEXTURE_2D\";\n GLEnum[GLEnum[\"TEXTURE\"] = 5890] = \"TEXTURE\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP\"] = 34067] = \"TEXTURE_CUBE_MAP\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_CUBE_MAP\"] = 34068] = \"TEXTURE_BINDING_CUBE_MAP\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_X\"] = 34069] = \"TEXTURE_CUBE_MAP_POSITIVE_X\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_X\"] = 34070] = \"TEXTURE_CUBE_MAP_NEGATIVE_X\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_Y\"] = 34071] = \"TEXTURE_CUBE_MAP_POSITIVE_Y\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_Y\"] = 34072] = \"TEXTURE_CUBE_MAP_NEGATIVE_Y\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_POSITIVE_Z\"] = 34073] = \"TEXTURE_CUBE_MAP_POSITIVE_Z\";\n GLEnum[GLEnum[\"TEXTURE_CUBE_MAP_NEGATIVE_Z\"] = 34074] = \"TEXTURE_CUBE_MAP_NEGATIVE_Z\";\n GLEnum[GLEnum[\"MAX_CUBE_MAP_TEXTURE_SIZE\"] = 34076] = \"MAX_CUBE_MAP_TEXTURE_SIZE\";\n // TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.\n GLEnum[GLEnum[\"TEXTURE0\"] = 33984] = \"TEXTURE0\";\n GLEnum[GLEnum[\"ACTIVE_TEXTURE\"] = 34016] = \"ACTIVE_TEXTURE\";\n GLEnum[GLEnum[\"REPEAT\"] = 10497] = \"REPEAT\";\n GLEnum[GLEnum[\"CLAMP_TO_EDGE\"] = 33071] = \"CLAMP_TO_EDGE\";\n GLEnum[GLEnum[\"MIRRORED_REPEAT\"] = 33648] = \"MIRRORED_REPEAT\";\n // Emulation\n GLEnum[GLEnum[\"TEXTURE_WIDTH\"] = 4096] = \"TEXTURE_WIDTH\";\n GLEnum[GLEnum[\"TEXTURE_HEIGHT\"] = 4097] = \"TEXTURE_HEIGHT\";\n // Uniform types\n GLEnum[GLEnum[\"FLOAT_VEC2\"] = 35664] = \"FLOAT_VEC2\";\n GLEnum[GLEnum[\"FLOAT_VEC3\"] = 35665] = \"FLOAT_VEC3\";\n GLEnum[GLEnum[\"FLOAT_VEC4\"] = 35666] = \"FLOAT_VEC4\";\n GLEnum[GLEnum[\"INT_VEC2\"] = 35667] = \"INT_VEC2\";\n GLEnum[GLEnum[\"INT_VEC3\"] = 35668] = \"INT_VEC3\";\n GLEnum[GLEnum[\"INT_VEC4\"] = 35669] = \"INT_VEC4\";\n GLEnum[GLEnum[\"BOOL\"] = 35670] = \"BOOL\";\n GLEnum[GLEnum[\"BOOL_VEC2\"] = 35671] = \"BOOL_VEC2\";\n GLEnum[GLEnum[\"BOOL_VEC3\"] = 35672] = \"BOOL_VEC3\";\n GLEnum[GLEnum[\"BOOL_VEC4\"] = 35673] = \"BOOL_VEC4\";\n GLEnum[GLEnum[\"FLOAT_MAT2\"] = 35674] = \"FLOAT_MAT2\";\n GLEnum[GLEnum[\"FLOAT_MAT3\"] = 35675] = \"FLOAT_MAT3\";\n GLEnum[GLEnum[\"FLOAT_MAT4\"] = 35676] = \"FLOAT_MAT4\";\n GLEnum[GLEnum[\"SAMPLER_2D\"] = 35678] = \"SAMPLER_2D\";\n GLEnum[GLEnum[\"SAMPLER_CUBE\"] = 35680] = \"SAMPLER_CUBE\";\n // Shader precision-specified types\n GLEnum[GLEnum[\"LOW_FLOAT\"] = 36336] = \"LOW_FLOAT\";\n GLEnum[GLEnum[\"MEDIUM_FLOAT\"] = 36337] = \"MEDIUM_FLOAT\";\n GLEnum[GLEnum[\"HIGH_FLOAT\"] = 36338] = \"HIGH_FLOAT\";\n GLEnum[GLEnum[\"LOW_INT\"] = 36339] = \"LOW_INT\";\n GLEnum[GLEnum[\"MEDIUM_INT\"] = 36340] = \"MEDIUM_INT\";\n GLEnum[GLEnum[\"HIGH_INT\"] = 36341] = \"HIGH_INT\";\n // Framebuffers and renderbuffers\n GLEnum[GLEnum[\"FRAMEBUFFER\"] = 36160] = \"FRAMEBUFFER\";\n GLEnum[GLEnum[\"RENDERBUFFER\"] = 36161] = \"RENDERBUFFER\";\n GLEnum[GLEnum[\"RGBA4\"] = 32854] = \"RGBA4\";\n GLEnum[GLEnum[\"RGB5_A1\"] = 32855] = \"RGB5_A1\";\n GLEnum[GLEnum[\"RGB565\"] = 36194] = \"RGB565\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT16\"] = 33189] = \"DEPTH_COMPONENT16\";\n GLEnum[GLEnum[\"STENCIL_INDEX\"] = 6401] = \"STENCIL_INDEX\";\n GLEnum[GLEnum[\"STENCIL_INDEX8\"] = 36168] = \"STENCIL_INDEX8\";\n GLEnum[GLEnum[\"DEPTH_STENCIL\"] = 34041] = \"DEPTH_STENCIL\";\n GLEnum[GLEnum[\"RENDERBUFFER_WIDTH\"] = 36162] = \"RENDERBUFFER_WIDTH\";\n GLEnum[GLEnum[\"RENDERBUFFER_HEIGHT\"] = 36163] = \"RENDERBUFFER_HEIGHT\";\n GLEnum[GLEnum[\"RENDERBUFFER_INTERNAL_FORMAT\"] = 36164] = \"RENDERBUFFER_INTERNAL_FORMAT\";\n GLEnum[GLEnum[\"RENDERBUFFER_RED_SIZE\"] = 36176] = \"RENDERBUFFER_RED_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_GREEN_SIZE\"] = 36177] = \"RENDERBUFFER_GREEN_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_BLUE_SIZE\"] = 36178] = \"RENDERBUFFER_BLUE_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_ALPHA_SIZE\"] = 36179] = \"RENDERBUFFER_ALPHA_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_DEPTH_SIZE\"] = 36180] = \"RENDERBUFFER_DEPTH_SIZE\";\n GLEnum[GLEnum[\"RENDERBUFFER_STENCIL_SIZE\"] = 36181] = \"RENDERBUFFER_STENCIL_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\"] = 36048] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\"] = 36049] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\"] = 36050] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\"] = 36051] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT0\"] = 36064] = \"COLOR_ATTACHMENT0\";\n GLEnum[GLEnum[\"DEPTH_ATTACHMENT\"] = 36096] = \"DEPTH_ATTACHMENT\";\n GLEnum[GLEnum[\"STENCIL_ATTACHMENT\"] = 36128] = \"STENCIL_ATTACHMENT\";\n GLEnum[GLEnum[\"DEPTH_STENCIL_ATTACHMENT\"] = 33306] = \"DEPTH_STENCIL_ATTACHMENT\";\n GLEnum[GLEnum[\"NONE\"] = 0] = \"NONE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_COMPLETE\"] = 36053] = \"FRAMEBUFFER_COMPLETE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\"] = 36054] = \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\"] = 36055] = \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\"] = 36057] = \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";\n GLEnum[GLEnum[\"FRAMEBUFFER_UNSUPPORTED\"] = 36061] = \"FRAMEBUFFER_UNSUPPORTED\";\n GLEnum[GLEnum[\"FRAMEBUFFER_BINDING\"] = 36006] = \"FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"RENDERBUFFER_BINDING\"] = 36007] = \"RENDERBUFFER_BINDING\";\n GLEnum[GLEnum[\"READ_FRAMEBUFFER\"] = 36008] = \"READ_FRAMEBUFFER\";\n GLEnum[GLEnum[\"DRAW_FRAMEBUFFER\"] = 36009] = \"DRAW_FRAMEBUFFER\";\n GLEnum[GLEnum[\"MAX_RENDERBUFFER_SIZE\"] = 34024] = \"MAX_RENDERBUFFER_SIZE\";\n GLEnum[GLEnum[\"INVALID_FRAMEBUFFER_OPERATION\"] = 1286] = \"INVALID_FRAMEBUFFER_OPERATION\";\n // Pixel storage modes\n // Constants passed to pixelStorei().\n GLEnum[GLEnum[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n GLEnum[GLEnum[\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\"] = 37441] = \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"UNPACK_COLORSPACE_CONVERSION_WEBGL\"] = 37443] = \"UNPACK_COLORSPACE_CONVERSION_WEBGL\";\n // Additional constants defined WebGL 2\n // These constants are defined on the WebGL2RenderingContext interface.\n // All WebGL 1 constants are also available in a WebGL 2 context.\n // Getting GL parameter information\n // Constants passed to getParameter()\n // to specify what information to return.\n GLEnum[GLEnum[\"READ_BUFFER\"] = 3074] = \"READ_BUFFER\";\n GLEnum[GLEnum[\"UNPACK_ROW_LENGTH\"] = 3314] = \"UNPACK_ROW_LENGTH\";\n GLEnum[GLEnum[\"UNPACK_SKIP_ROWS\"] = 3315] = \"UNPACK_SKIP_ROWS\";\n GLEnum[GLEnum[\"UNPACK_SKIP_PIXELS\"] = 3316] = \"UNPACK_SKIP_PIXELS\";\n GLEnum[GLEnum[\"PACK_ROW_LENGTH\"] = 3330] = \"PACK_ROW_LENGTH\";\n GLEnum[GLEnum[\"PACK_SKIP_ROWS\"] = 3331] = \"PACK_SKIP_ROWS\";\n GLEnum[GLEnum[\"PACK_SKIP_PIXELS\"] = 3332] = \"PACK_SKIP_PIXELS\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_3D\"] = 32874] = \"TEXTURE_BINDING_3D\";\n GLEnum[GLEnum[\"UNPACK_SKIP_IMAGES\"] = 32877] = \"UNPACK_SKIP_IMAGES\";\n GLEnum[GLEnum[\"UNPACK_IMAGE_HEIGHT\"] = 32878] = \"UNPACK_IMAGE_HEIGHT\";\n GLEnum[GLEnum[\"MAX_3D_TEXTURE_SIZE\"] = 32883] = \"MAX_3D_TEXTURE_SIZE\";\n GLEnum[GLEnum[\"MAX_ELEMENTS_VERTICES\"] = 33000] = \"MAX_ELEMENTS_VERTICES\";\n GLEnum[GLEnum[\"MAX_ELEMENTS_INDICES\"] = 33001] = \"MAX_ELEMENTS_INDICES\";\n GLEnum[GLEnum[\"MAX_TEXTURE_LOD_BIAS\"] = 34045] = \"MAX_TEXTURE_LOD_BIAS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_COMPONENTS\"] = 35657] = \"MAX_FRAGMENT_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_COMPONENTS\"] = 35658] = \"MAX_VERTEX_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_ARRAY_TEXTURE_LAYERS\"] = 35071] = \"MAX_ARRAY_TEXTURE_LAYERS\";\n GLEnum[GLEnum[\"MIN_PROGRAM_TEXEL_OFFSET\"] = 35076] = \"MIN_PROGRAM_TEXEL_OFFSET\";\n GLEnum[GLEnum[\"MAX_PROGRAM_TEXEL_OFFSET\"] = 35077] = \"MAX_PROGRAM_TEXEL_OFFSET\";\n GLEnum[GLEnum[\"MAX_VARYING_COMPONENTS\"] = 35659] = \"MAX_VARYING_COMPONENTS\";\n GLEnum[GLEnum[\"FRAGMENT_SHADER_DERIVATIVE_HINT\"] = 35723] = \"FRAGMENT_SHADER_DERIVATIVE_HINT\";\n GLEnum[GLEnum[\"RASTERIZER_DISCARD\"] = 35977] = \"RASTERIZER_DISCARD\";\n GLEnum[GLEnum[\"VERTEX_ARRAY_BINDING\"] = 34229] = \"VERTEX_ARRAY_BINDING\";\n GLEnum[GLEnum[\"MAX_VERTEX_OUTPUT_COMPONENTS\"] = 37154] = \"MAX_VERTEX_OUTPUT_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_INPUT_COMPONENTS\"] = 37157] = \"MAX_FRAGMENT_INPUT_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_SERVER_WAIT_TIMEOUT\"] = 37137] = \"MAX_SERVER_WAIT_TIMEOUT\";\n GLEnum[GLEnum[\"MAX_ELEMENT_INDEX\"] = 36203] = \"MAX_ELEMENT_INDEX\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GLEnum[GLEnum[\"RED\"] = 6403] = \"RED\";\n GLEnum[GLEnum[\"RGB8\"] = 32849] = \"RGB8\";\n GLEnum[GLEnum[\"RGBA8\"] = 32856] = \"RGBA8\";\n GLEnum[GLEnum[\"RGB10_A2\"] = 32857] = \"RGB10_A2\";\n GLEnum[GLEnum[\"TEXTURE_3D\"] = 32879] = \"TEXTURE_3D\";\n /** Sets the wrap parameter for texture coordinate to either GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, or GL_REPEAT. G */\n GLEnum[GLEnum[\"TEXTURE_WRAP_R\"] = 32882] = \"TEXTURE_WRAP_R\";\n GLEnum[GLEnum[\"TEXTURE_MIN_LOD\"] = 33082] = \"TEXTURE_MIN_LOD\";\n GLEnum[GLEnum[\"TEXTURE_MAX_LOD\"] = 33083] = \"TEXTURE_MAX_LOD\";\n GLEnum[GLEnum[\"TEXTURE_BASE_LEVEL\"] = 33084] = \"TEXTURE_BASE_LEVEL\";\n GLEnum[GLEnum[\"TEXTURE_MAX_LEVEL\"] = 33085] = \"TEXTURE_MAX_LEVEL\";\n GLEnum[GLEnum[\"TEXTURE_COMPARE_MODE\"] = 34892] = \"TEXTURE_COMPARE_MODE\";\n GLEnum[GLEnum[\"TEXTURE_COMPARE_FUNC\"] = 34893] = \"TEXTURE_COMPARE_FUNC\";\n GLEnum[GLEnum[\"SRGB\"] = 35904] = \"SRGB\";\n GLEnum[GLEnum[\"SRGB8\"] = 35905] = \"SRGB8\";\n GLEnum[GLEnum[\"SRGB8_ALPHA8\"] = 35907] = \"SRGB8_ALPHA8\";\n GLEnum[GLEnum[\"COMPARE_REF_TO_TEXTURE\"] = 34894] = \"COMPARE_REF_TO_TEXTURE\";\n GLEnum[GLEnum[\"RGBA32F\"] = 34836] = \"RGBA32F\";\n GLEnum[GLEnum[\"RGB32F\"] = 34837] = \"RGB32F\";\n GLEnum[GLEnum[\"RGBA16F\"] = 34842] = \"RGBA16F\";\n GLEnum[GLEnum[\"RGB16F\"] = 34843] = \"RGB16F\";\n GLEnum[GLEnum[\"TEXTURE_2D_ARRAY\"] = 35866] = \"TEXTURE_2D_ARRAY\";\n GLEnum[GLEnum[\"TEXTURE_BINDING_2D_ARRAY\"] = 35869] = \"TEXTURE_BINDING_2D_ARRAY\";\n GLEnum[GLEnum[\"R11F_G11F_B10F\"] = 35898] = \"R11F_G11F_B10F\";\n GLEnum[GLEnum[\"RGB9_E5\"] = 35901] = \"RGB9_E5\";\n GLEnum[GLEnum[\"RGBA32UI\"] = 36208] = \"RGBA32UI\";\n GLEnum[GLEnum[\"RGB32UI\"] = 36209] = \"RGB32UI\";\n GLEnum[GLEnum[\"RGBA16UI\"] = 36214] = \"RGBA16UI\";\n GLEnum[GLEnum[\"RGB16UI\"] = 36215] = \"RGB16UI\";\n GLEnum[GLEnum[\"RGBA8UI\"] = 36220] = \"RGBA8UI\";\n GLEnum[GLEnum[\"RGB8UI\"] = 36221] = \"RGB8UI\";\n GLEnum[GLEnum[\"RGBA32I\"] = 36226] = \"RGBA32I\";\n GLEnum[GLEnum[\"RGB32I\"] = 36227] = \"RGB32I\";\n GLEnum[GLEnum[\"RGBA16I\"] = 36232] = \"RGBA16I\";\n GLEnum[GLEnum[\"RGB16I\"] = 36233] = \"RGB16I\";\n GLEnum[GLEnum[\"RGBA8I\"] = 36238] = \"RGBA8I\";\n GLEnum[GLEnum[\"RGB8I\"] = 36239] = \"RGB8I\";\n GLEnum[GLEnum[\"RED_INTEGER\"] = 36244] = \"RED_INTEGER\";\n GLEnum[GLEnum[\"RGB_INTEGER\"] = 36248] = \"RGB_INTEGER\";\n GLEnum[GLEnum[\"RGBA_INTEGER\"] = 36249] = \"RGBA_INTEGER\";\n GLEnum[GLEnum[\"R8\"] = 33321] = \"R8\";\n GLEnum[GLEnum[\"RG8\"] = 33323] = \"RG8\";\n GLEnum[GLEnum[\"R16F\"] = 33325] = \"R16F\";\n GLEnum[GLEnum[\"R32F\"] = 33326] = \"R32F\";\n GLEnum[GLEnum[\"RG16F\"] = 33327] = \"RG16F\";\n GLEnum[GLEnum[\"RG32F\"] = 33328] = \"RG32F\";\n GLEnum[GLEnum[\"R8I\"] = 33329] = \"R8I\";\n GLEnum[GLEnum[\"R8UI\"] = 33330] = \"R8UI\";\n GLEnum[GLEnum[\"R16I\"] = 33331] = \"R16I\";\n GLEnum[GLEnum[\"R16UI\"] = 33332] = \"R16UI\";\n GLEnum[GLEnum[\"R32I\"] = 33333] = \"R32I\";\n GLEnum[GLEnum[\"R32UI\"] = 33334] = \"R32UI\";\n GLEnum[GLEnum[\"RG8I\"] = 33335] = \"RG8I\";\n GLEnum[GLEnum[\"RG8UI\"] = 33336] = \"RG8UI\";\n GLEnum[GLEnum[\"RG16I\"] = 33337] = \"RG16I\";\n GLEnum[GLEnum[\"RG16UI\"] = 33338] = \"RG16UI\";\n GLEnum[GLEnum[\"RG32I\"] = 33339] = \"RG32I\";\n GLEnum[GLEnum[\"RG32UI\"] = 33340] = \"RG32UI\";\n GLEnum[GLEnum[\"R8_SNORM\"] = 36756] = \"R8_SNORM\";\n GLEnum[GLEnum[\"RG8_SNORM\"] = 36757] = \"RG8_SNORM\";\n GLEnum[GLEnum[\"RGB8_SNORM\"] = 36758] = \"RGB8_SNORM\";\n GLEnum[GLEnum[\"RGBA8_SNORM\"] = 36759] = \"RGBA8_SNORM\";\n GLEnum[GLEnum[\"RGB10_A2UI\"] = 36975] = \"RGB10_A2UI\";\n /* covered by extension\n COMPRESSED_R11_EAC = 0x9270,\n COMPRESSED_SIGNED_R11_EAC = 0x9271,\n COMPRESSED_RG11_EAC = 0x9272,\n COMPRESSED_SIGNED_RG11_EAC = 0x9273,\n COMPRESSED_RGB8_ETC2 = 0x9274,\n COMPRESSED_SRGB8_ETC2 = 0x9275,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC = 0x9277,\n COMPRESSED_RGBA8_ETC2_EAC = 0x9278,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279,\n */\n GLEnum[GLEnum[\"TEXTURE_IMMUTABLE_FORMAT\"] = 37167] = \"TEXTURE_IMMUTABLE_FORMAT\";\n GLEnum[GLEnum[\"TEXTURE_IMMUTABLE_LEVELS\"] = 33503] = \"TEXTURE_IMMUTABLE_LEVELS\";\n // Pixel types\n GLEnum[GLEnum[\"UNSIGNED_INT_2_10_10_10_REV\"] = 33640] = \"UNSIGNED_INT_2_10_10_10_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_10F_11F_11F_REV\"] = 35899] = \"UNSIGNED_INT_10F_11F_11F_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_5_9_9_9_REV\"] = 35902] = \"UNSIGNED_INT_5_9_9_9_REV\";\n GLEnum[GLEnum[\"FLOAT_32_UNSIGNED_INT_24_8_REV\"] = 36269] = \"FLOAT_32_UNSIGNED_INT_24_8_REV\";\n GLEnum[GLEnum[\"UNSIGNED_INT_24_8\"] = 34042] = \"UNSIGNED_INT_24_8\";\n GLEnum[GLEnum[\"HALF_FLOAT\"] = 5131] = \"HALF_FLOAT\";\n GLEnum[GLEnum[\"RG\"] = 33319] = \"RG\";\n GLEnum[GLEnum[\"RG_INTEGER\"] = 33320] = \"RG_INTEGER\";\n GLEnum[GLEnum[\"INT_2_10_10_10_REV\"] = 36255] = \"INT_2_10_10_10_REV\";\n // Queries\n GLEnum[GLEnum[\"CURRENT_QUERY\"] = 34917] = \"CURRENT_QUERY\";\n /** Returns a GLuint containing the query result. */\n GLEnum[GLEnum[\"QUERY_RESULT\"] = 34918] = \"QUERY_RESULT\";\n /** Whether query result is available. */\n GLEnum[GLEnum[\"QUERY_RESULT_AVAILABLE\"] = 34919] = \"QUERY_RESULT_AVAILABLE\";\n /** Occlusion query (if drawing passed depth test) */\n GLEnum[GLEnum[\"ANY_SAMPLES_PASSED\"] = 35887] = \"ANY_SAMPLES_PASSED\";\n /** Occlusion query less accurate/faster version */\n GLEnum[GLEnum[\"ANY_SAMPLES_PASSED_CONSERVATIVE\"] = 36202] = \"ANY_SAMPLES_PASSED_CONSERVATIVE\";\n // Draw buffers\n GLEnum[GLEnum[\"MAX_DRAW_BUFFERS\"] = 34852] = \"MAX_DRAW_BUFFERS\";\n GLEnum[GLEnum[\"DRAW_BUFFER0\"] = 34853] = \"DRAW_BUFFER0\";\n GLEnum[GLEnum[\"DRAW_BUFFER1\"] = 34854] = \"DRAW_BUFFER1\";\n GLEnum[GLEnum[\"DRAW_BUFFER2\"] = 34855] = \"DRAW_BUFFER2\";\n GLEnum[GLEnum[\"DRAW_BUFFER3\"] = 34856] = \"DRAW_BUFFER3\";\n GLEnum[GLEnum[\"DRAW_BUFFER4\"] = 34857] = \"DRAW_BUFFER4\";\n GLEnum[GLEnum[\"DRAW_BUFFER5\"] = 34858] = \"DRAW_BUFFER5\";\n GLEnum[GLEnum[\"DRAW_BUFFER6\"] = 34859] = \"DRAW_BUFFER6\";\n GLEnum[GLEnum[\"DRAW_BUFFER7\"] = 34860] = \"DRAW_BUFFER7\";\n GLEnum[GLEnum[\"DRAW_BUFFER8\"] = 34861] = \"DRAW_BUFFER8\";\n GLEnum[GLEnum[\"DRAW_BUFFER9\"] = 34862] = \"DRAW_BUFFER9\";\n GLEnum[GLEnum[\"DRAW_BUFFER10\"] = 34863] = \"DRAW_BUFFER10\";\n GLEnum[GLEnum[\"DRAW_BUFFER11\"] = 34864] = \"DRAW_BUFFER11\";\n GLEnum[GLEnum[\"DRAW_BUFFER12\"] = 34865] = \"DRAW_BUFFER12\";\n GLEnum[GLEnum[\"DRAW_BUFFER13\"] = 34866] = \"DRAW_BUFFER13\";\n GLEnum[GLEnum[\"DRAW_BUFFER14\"] = 34867] = \"DRAW_BUFFER14\";\n GLEnum[GLEnum[\"DRAW_BUFFER15\"] = 34868] = \"DRAW_BUFFER15\";\n GLEnum[GLEnum[\"MAX_COLOR_ATTACHMENTS\"] = 36063] = \"MAX_COLOR_ATTACHMENTS\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT1\"] = 36065] = \"COLOR_ATTACHMENT1\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT2\"] = 36066] = \"COLOR_ATTACHMENT2\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT3\"] = 36067] = \"COLOR_ATTACHMENT3\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT4\"] = 36068] = \"COLOR_ATTACHMENT4\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT5\"] = 36069] = \"COLOR_ATTACHMENT5\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT6\"] = 36070] = \"COLOR_ATTACHMENT6\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT7\"] = 36071] = \"COLOR_ATTACHMENT7\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT8\"] = 36072] = \"COLOR_ATTACHMENT8\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT9\"] = 36073] = \"COLOR_ATTACHMENT9\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT10\"] = 36074] = \"COLOR_ATTACHMENT10\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT11\"] = 36075] = \"COLOR_ATTACHMENT11\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT12\"] = 36076] = \"COLOR_ATTACHMENT12\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT13\"] = 36077] = \"COLOR_ATTACHMENT13\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT14\"] = 36078] = \"COLOR_ATTACHMENT14\";\n GLEnum[GLEnum[\"COLOR_ATTACHMENT15\"] = 36079] = \"COLOR_ATTACHMENT15\";\n // Samplers\n GLEnum[GLEnum[\"SAMPLER_3D\"] = 35679] = \"SAMPLER_3D\";\n GLEnum[GLEnum[\"SAMPLER_2D_SHADOW\"] = 35682] = \"SAMPLER_2D_SHADOW\";\n GLEnum[GLEnum[\"SAMPLER_2D_ARRAY\"] = 36289] = \"SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"SAMPLER_2D_ARRAY_SHADOW\"] = 36292] = \"SAMPLER_2D_ARRAY_SHADOW\";\n GLEnum[GLEnum[\"SAMPLER_CUBE_SHADOW\"] = 36293] = \"SAMPLER_CUBE_SHADOW\";\n GLEnum[GLEnum[\"INT_SAMPLER_2D\"] = 36298] = \"INT_SAMPLER_2D\";\n GLEnum[GLEnum[\"INT_SAMPLER_3D\"] = 36299] = \"INT_SAMPLER_3D\";\n GLEnum[GLEnum[\"INT_SAMPLER_CUBE\"] = 36300] = \"INT_SAMPLER_CUBE\";\n GLEnum[GLEnum[\"INT_SAMPLER_2D_ARRAY\"] = 36303] = \"INT_SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_2D\"] = 36306] = \"UNSIGNED_INT_SAMPLER_2D\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_3D\"] = 36307] = \"UNSIGNED_INT_SAMPLER_3D\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_CUBE\"] = 36308] = \"UNSIGNED_INT_SAMPLER_CUBE\";\n GLEnum[GLEnum[\"UNSIGNED_INT_SAMPLER_2D_ARRAY\"] = 36311] = \"UNSIGNED_INT_SAMPLER_2D_ARRAY\";\n GLEnum[GLEnum[\"MAX_SAMPLES\"] = 36183] = \"MAX_SAMPLES\";\n GLEnum[GLEnum[\"SAMPLER_BINDING\"] = 35097] = \"SAMPLER_BINDING\";\n // Buffers\n GLEnum[GLEnum[\"PIXEL_PACK_BUFFER\"] = 35051] = \"PIXEL_PACK_BUFFER\";\n GLEnum[GLEnum[\"PIXEL_UNPACK_BUFFER\"] = 35052] = \"PIXEL_UNPACK_BUFFER\";\n GLEnum[GLEnum[\"PIXEL_PACK_BUFFER_BINDING\"] = 35053] = \"PIXEL_PACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"PIXEL_UNPACK_BUFFER_BINDING\"] = 35055] = \"PIXEL_UNPACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"COPY_READ_BUFFER\"] = 36662] = \"COPY_READ_BUFFER\";\n GLEnum[GLEnum[\"COPY_WRITE_BUFFER\"] = 36663] = \"COPY_WRITE_BUFFER\";\n GLEnum[GLEnum[\"COPY_READ_BUFFER_BINDING\"] = 36662] = \"COPY_READ_BUFFER_BINDING\";\n GLEnum[GLEnum[\"COPY_WRITE_BUFFER_BINDING\"] = 36663] = \"COPY_WRITE_BUFFER_BINDING\";\n // Data types\n GLEnum[GLEnum[\"FLOAT_MAT2x3\"] = 35685] = \"FLOAT_MAT2x3\";\n GLEnum[GLEnum[\"FLOAT_MAT2x4\"] = 35686] = \"FLOAT_MAT2x4\";\n GLEnum[GLEnum[\"FLOAT_MAT3x2\"] = 35687] = \"FLOAT_MAT3x2\";\n GLEnum[GLEnum[\"FLOAT_MAT3x4\"] = 35688] = \"FLOAT_MAT3x4\";\n GLEnum[GLEnum[\"FLOAT_MAT4x2\"] = 35689] = \"FLOAT_MAT4x2\";\n GLEnum[GLEnum[\"FLOAT_MAT4x3\"] = 35690] = \"FLOAT_MAT4x3\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC2\"] = 36294] = \"UNSIGNED_INT_VEC2\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC3\"] = 36295] = \"UNSIGNED_INT_VEC3\";\n GLEnum[GLEnum[\"UNSIGNED_INT_VEC4\"] = 36296] = \"UNSIGNED_INT_VEC4\";\n GLEnum[GLEnum[\"UNSIGNED_NORMALIZED\"] = 35863] = \"UNSIGNED_NORMALIZED\";\n GLEnum[GLEnum[\"SIGNED_NORMALIZED\"] = 36764] = \"SIGNED_NORMALIZED\";\n // Vertex attributes\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_INTEGER\"] = 35069] = \"VERTEX_ATTRIB_ARRAY_INTEGER\";\n GLEnum[GLEnum[\"VERTEX_ATTRIB_ARRAY_DIVISOR\"] = 35070] = \"VERTEX_ATTRIB_ARRAY_DIVISOR\";\n // Transform feedback\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_MODE\"] = 35967] = \"TRANSFORM_FEEDBACK_BUFFER_MODE\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\"] = 35968] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_VARYINGS\"] = 35971] = \"TRANSFORM_FEEDBACK_VARYINGS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_START\"] = 35972] = \"TRANSFORM_FEEDBACK_BUFFER_START\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_SIZE\"] = 35973] = \"TRANSFORM_FEEDBACK_BUFFER_SIZE\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\"] = 35976] = \"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\"] = 35978] = \"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\"] = 35979] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\";\n GLEnum[GLEnum[\"INTERLEAVED_ATTRIBS\"] = 35980] = \"INTERLEAVED_ATTRIBS\";\n GLEnum[GLEnum[\"SEPARATE_ATTRIBS\"] = 35981] = \"SEPARATE_ATTRIBS\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER\"] = 35982] = \"TRANSFORM_FEEDBACK_BUFFER\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BUFFER_BINDING\"] = 35983] = \"TRANSFORM_FEEDBACK_BUFFER_BINDING\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK\"] = 36386] = \"TRANSFORM_FEEDBACK\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_PAUSED\"] = 36387] = \"TRANSFORM_FEEDBACK_PAUSED\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_ACTIVE\"] = 36388] = \"TRANSFORM_FEEDBACK_ACTIVE\";\n GLEnum[GLEnum[\"TRANSFORM_FEEDBACK_BINDING\"] = 36389] = \"TRANSFORM_FEEDBACK_BINDING\";\n // Framebuffers and renderbuffers\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\"] = 33296] = \"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\"] = 33297] = \"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_RED_SIZE\"] = 33298] = \"FRAMEBUFFER_ATTACHMENT_RED_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\"] = 33299] = \"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\"] = 33300] = \"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\"] = 33301] = \"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\"] = 33302] = \"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\"] = 33303] = \"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\";\n GLEnum[GLEnum[\"FRAMEBUFFER_DEFAULT\"] = 33304] = \"FRAMEBUFFER_DEFAULT\";\n // DEPTH_STENCIL_ATTACHMENT = 0x821A,\n // DEPTH_STENCIL = 0x84F9,\n GLEnum[GLEnum[\"DEPTH24_STENCIL8\"] = 35056] = \"DEPTH24_STENCIL8\";\n GLEnum[GLEnum[\"DRAW_FRAMEBUFFER_BINDING\"] = 36006] = \"DRAW_FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"READ_FRAMEBUFFER_BINDING\"] = 36010] = \"READ_FRAMEBUFFER_BINDING\";\n GLEnum[GLEnum[\"RENDERBUFFER_SAMPLES\"] = 36011] = \"RENDERBUFFER_SAMPLES\";\n GLEnum[GLEnum[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\"] = 36052] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\";\n GLEnum[GLEnum[\"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\"] = 36182] = \"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\";\n // Uniforms\n GLEnum[GLEnum[\"UNIFORM_BUFFER\"] = 35345] = \"UNIFORM_BUFFER\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_BINDING\"] = 35368] = \"UNIFORM_BUFFER_BINDING\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_START\"] = 35369] = \"UNIFORM_BUFFER_START\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_SIZE\"] = 35370] = \"UNIFORM_BUFFER_SIZE\";\n GLEnum[GLEnum[\"MAX_VERTEX_UNIFORM_BLOCKS\"] = 35371] = \"MAX_VERTEX_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_FRAGMENT_UNIFORM_BLOCKS\"] = 35373] = \"MAX_FRAGMENT_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_COMBINED_UNIFORM_BLOCKS\"] = 35374] = \"MAX_COMBINED_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"MAX_UNIFORM_BUFFER_BINDINGS\"] = 35375] = \"MAX_UNIFORM_BUFFER_BINDINGS\";\n GLEnum[GLEnum[\"MAX_UNIFORM_BLOCK_SIZE\"] = 35376] = \"MAX_UNIFORM_BLOCK_SIZE\";\n GLEnum[GLEnum[\"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\"] = 35377] = \"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\"] = 35379] = \"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\";\n GLEnum[GLEnum[\"UNIFORM_BUFFER_OFFSET_ALIGNMENT\"] = 35380] = \"UNIFORM_BUFFER_OFFSET_ALIGNMENT\";\n GLEnum[GLEnum[\"ACTIVE_UNIFORM_BLOCKS\"] = 35382] = \"ACTIVE_UNIFORM_BLOCKS\";\n GLEnum[GLEnum[\"UNIFORM_TYPE\"] = 35383] = \"UNIFORM_TYPE\";\n GLEnum[GLEnum[\"UNIFORM_SIZE\"] = 35384] = \"UNIFORM_SIZE\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_INDEX\"] = 35386] = \"UNIFORM_BLOCK_INDEX\";\n GLEnum[GLEnum[\"UNIFORM_OFFSET\"] = 35387] = \"UNIFORM_OFFSET\";\n GLEnum[GLEnum[\"UNIFORM_ARRAY_STRIDE\"] = 35388] = \"UNIFORM_ARRAY_STRIDE\";\n GLEnum[GLEnum[\"UNIFORM_MATRIX_STRIDE\"] = 35389] = \"UNIFORM_MATRIX_STRIDE\";\n GLEnum[GLEnum[\"UNIFORM_IS_ROW_MAJOR\"] = 35390] = \"UNIFORM_IS_ROW_MAJOR\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_BINDING\"] = 35391] = \"UNIFORM_BLOCK_BINDING\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_DATA_SIZE\"] = 35392] = \"UNIFORM_BLOCK_DATA_SIZE\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_ACTIVE_UNIFORMS\"] = 35394] = \"UNIFORM_BLOCK_ACTIVE_UNIFORMS\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\"] = 35395] = \"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\"] = 35396] = \"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\";\n GLEnum[GLEnum[\"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\"] = 35398] = \"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\";\n // Sync objects\n GLEnum[GLEnum[\"OBJECT_TYPE\"] = 37138] = \"OBJECT_TYPE\";\n GLEnum[GLEnum[\"SYNC_CONDITION\"] = 37139] = \"SYNC_CONDITION\";\n GLEnum[GLEnum[\"SYNC_STATUS\"] = 37140] = \"SYNC_STATUS\";\n GLEnum[GLEnum[\"SYNC_FLAGS\"] = 37141] = \"SYNC_FLAGS\";\n GLEnum[GLEnum[\"SYNC_FENCE\"] = 37142] = \"SYNC_FENCE\";\n GLEnum[GLEnum[\"SYNC_GPU_COMMANDS_COMPLETE\"] = 37143] = \"SYNC_GPU_COMMANDS_COMPLETE\";\n GLEnum[GLEnum[\"UNSIGNALED\"] = 37144] = \"UNSIGNALED\";\n GLEnum[GLEnum[\"SIGNALED\"] = 37145] = \"SIGNALED\";\n GLEnum[GLEnum[\"ALREADY_SIGNALED\"] = 37146] = \"ALREADY_SIGNALED\";\n GLEnum[GLEnum[\"TIMEOUT_EXPIRED\"] = 37147] = \"TIMEOUT_EXPIRED\";\n GLEnum[GLEnum[\"CONDITION_SATISFIED\"] = 37148] = \"CONDITION_SATISFIED\";\n GLEnum[GLEnum[\"WAIT_FAILED\"] = 37149] = \"WAIT_FAILED\";\n GLEnum[GLEnum[\"SYNC_FLUSH_COMMANDS_BIT\"] = 1] = \"SYNC_FLUSH_COMMANDS_BIT\";\n // Miscellaneous constants\n GLEnum[GLEnum[\"COLOR\"] = 6144] = \"COLOR\";\n GLEnum[GLEnum[\"DEPTH\"] = 6145] = \"DEPTH\";\n GLEnum[GLEnum[\"STENCIL\"] = 6146] = \"STENCIL\";\n GLEnum[GLEnum[\"MIN\"] = 32775] = \"MIN\";\n GLEnum[GLEnum[\"MAX\"] = 32776] = \"MAX\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT24\"] = 33190] = \"DEPTH_COMPONENT24\";\n GLEnum[GLEnum[\"STREAM_READ\"] = 35041] = \"STREAM_READ\";\n GLEnum[GLEnum[\"STREAM_COPY\"] = 35042] = \"STREAM_COPY\";\n GLEnum[GLEnum[\"STATIC_READ\"] = 35045] = \"STATIC_READ\";\n GLEnum[GLEnum[\"STATIC_COPY\"] = 35046] = \"STATIC_COPY\";\n GLEnum[GLEnum[\"DYNAMIC_READ\"] = 35049] = \"DYNAMIC_READ\";\n GLEnum[GLEnum[\"DYNAMIC_COPY\"] = 35050] = \"DYNAMIC_COPY\";\n GLEnum[GLEnum[\"DEPTH_COMPONENT32F\"] = 36012] = \"DEPTH_COMPONENT32F\";\n GLEnum[GLEnum[\"DEPTH32F_STENCIL8\"] = 36013] = \"DEPTH32F_STENCIL8\";\n GLEnum[GLEnum[\"INVALID_INDEX\"] = 4294967295] = \"INVALID_INDEX\";\n GLEnum[GLEnum[\"TIMEOUT_IGNORED\"] = -1] = \"TIMEOUT_IGNORED\";\n GLEnum[GLEnum[\"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\"] = 37447] = \"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\";\n // Constants defined in WebGL extensions\n // WEBGL_debug_renderer_info\n /** Passed to getParameter to get the vendor string of the graphics driver. */\n GLEnum[GLEnum[\"UNMASKED_VENDOR_WEBGL\"] = 37445] = \"UNMASKED_VENDOR_WEBGL\";\n /** Passed to getParameter to get the renderer string of the graphics driver. */\n GLEnum[GLEnum[\"UNMASKED_RENDERER_WEBGL\"] = 37446] = \"UNMASKED_RENDERER_WEBGL\";\n // EXT_texture_filter_anisotropic\n /** Returns the maximum available anisotropy. */\n GLEnum[GLEnum[\"MAX_TEXTURE_MAX_ANISOTROPY_EXT\"] = 34047] = \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\";\n /** Passed to texParameter to set the desired maximum anisotropy for a texture. */\n GLEnum[GLEnum[\"TEXTURE_MAX_ANISOTROPY_EXT\"] = 34046] = \"TEXTURE_MAX_ANISOTROPY_EXT\";\n // EXT_texture_norm16 - https://khronos.org/registry/webgl/extensions/EXT_texture_norm16/\n GLEnum[GLEnum[\"R16_EXT\"] = 33322] = \"R16_EXT\";\n GLEnum[GLEnum[\"RG16_EXT\"] = 33324] = \"RG16_EXT\";\n GLEnum[GLEnum[\"RGB16_EXT\"] = 32852] = \"RGB16_EXT\";\n GLEnum[GLEnum[\"RGBA16_EXT\"] = 32859] = \"RGBA16_EXT\";\n GLEnum[GLEnum[\"R16_SNORM_EXT\"] = 36760] = \"R16_SNORM_EXT\";\n GLEnum[GLEnum[\"RG16_SNORM_EXT\"] = 36761] = \"RG16_SNORM_EXT\";\n GLEnum[GLEnum[\"RGB16_SNORM_EXT\"] = 36762] = \"RGB16_SNORM_EXT\";\n GLEnum[GLEnum[\"RGBA16_SNORM_EXT\"] = 36763] = \"RGBA16_SNORM_EXT\";\n // WEBGL_compressed_texture_s3tc (BC1, BC2, BC3)\n /** A DXT1-compressed image in an RGB image format. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n /** A DXT1-compressed image in an RGB image format with a simple on/off alpha value. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT1_EXT\"] = 33777] = \"COMPRESSED_RGBA_S3TC_DXT1_EXT\";\n /** A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT3_EXT\"] = 33778] = \"COMPRESSED_RGBA_S3TC_DXT3_EXT\";\n /** A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n // WEBGL_compressed_texture_s3tc_srgb (BC1, BC2, BC3 - SRGB)\n GLEnum[GLEnum[\"COMPRESSED_SRGB_S3TC_DXT1_EXT\"] = 35916] = \"COMPRESSED_SRGB_S3TC_DXT1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\"] = 35917] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\"] = 35918] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\"] = 35919] = \"COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\";\n // WEBGL_compressed_texture_rgtc (BC4, BC5)\n GLEnum[GLEnum[\"COMPRESSED_RED_RGTC1_EXT\"] = 36283] = \"COMPRESSED_RED_RGTC1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RED_RGTC1_EXT\"] = 36284] = \"COMPRESSED_SIGNED_RED_RGTC1_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RED_GREEN_RGTC2_EXT\"] = 36285] = \"COMPRESSED_RED_GREEN_RGTC2_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT\"] = 36286] = \"COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT\";\n // WEBGL_compressed_texture_bptc (BC6, BC7)\n GLEnum[GLEnum[\"COMPRESSED_RGBA_BPTC_UNORM_EXT\"] = 36492] = \"COMPRESSED_RGBA_BPTC_UNORM_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT\"] = 36493] = \"COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT\"] = 36494] = \"COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT\";\n GLEnum[GLEnum[\"COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT\"] = 36495] = \"COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT\";\n // WEBGL_compressed_texture_es3\n /** One-channel (red) unsigned format compression. */\n GLEnum[GLEnum[\"COMPRESSED_R11_EAC\"] = 37488] = \"COMPRESSED_R11_EAC\";\n /** One-channel (red) signed format compression. */\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_R11_EAC\"] = 37489] = \"COMPRESSED_SIGNED_R11_EAC\";\n /** Two-channel (red and green) unsigned format compression. */\n GLEnum[GLEnum[\"COMPRESSED_RG11_EAC\"] = 37490] = \"COMPRESSED_RG11_EAC\";\n /** Two-channel (red and green) signed format compression. */\n GLEnum[GLEnum[\"COMPRESSED_SIGNED_RG11_EAC\"] = 37491] = \"COMPRESSED_SIGNED_RG11_EAC\";\n /** Compresses RGB8 data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_RGB8_ETC2\"] = 37492] = \"COMPRESSED_RGB8_ETC2\";\n /** Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA8_ETC2_EAC\"] = 37493] = \"COMPRESSED_RGBA8_ETC2_EAC\";\n /** Compresses sRGB8 data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ETC2\"] = 37494] = \"COMPRESSED_SRGB8_ETC2\";\n /** Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\"] = 37495] = \"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\";\n /** Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent. */\n GLEnum[GLEnum[\"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37496] = \"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n /** Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent. */\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37497] = \"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n // WEBGL_compressed_texture_pvrtc\n /** RGB compression in 4-bit mode. One block for each 4×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n /** RGBA compression in 4-bit mode. One block for each 4×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n /** RGB compression in 2-bit mode. One block for each 8×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\"] = 35841] = \"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\";\n /** RGBA compression in 2-bit mode. One block for each 8×4 pixels. */\n GLEnum[GLEnum[\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\"] = 35843] = \"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\";\n // WEBGL_compressed_texture_etc1\n /** Compresses 24-bit RGB data with no alpha channel. */\n GLEnum[GLEnum[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n // WEBGL_compressed_texture_atc\n GLEnum[GLEnum[\"COMPRESSED_RGB_ATC_WEBGL\"] = 35986] = \"COMPRESSED_RGB_ATC_WEBGL\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\"] = 35986] = \"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\"] = 34798] = \"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\";\n // WEBGL_compressed_texture_astc\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_4x4_KHR\"] = 37808] = \"COMPRESSED_RGBA_ASTC_4x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_5x4_KHR\"] = 37809] = \"COMPRESSED_RGBA_ASTC_5x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_5x5_KHR\"] = 37810] = \"COMPRESSED_RGBA_ASTC_5x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_6x5_KHR\"] = 37811] = \"COMPRESSED_RGBA_ASTC_6x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_6x6_KHR\"] = 37812] = \"COMPRESSED_RGBA_ASTC_6x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x5_KHR\"] = 37813] = \"COMPRESSED_RGBA_ASTC_8x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x6_KHR\"] = 37814] = \"COMPRESSED_RGBA_ASTC_8x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_8x8_KHR\"] = 37815] = \"COMPRESSED_RGBA_ASTC_8x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x5_KHR\"] = 37816] = \"COMPRESSED_RGBA_ASTC_10x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x6_KHR\"] = 37817] = \"COMPRESSED_RGBA_ASTC_10x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x8_KHR\"] = 37818] = \"COMPRESSED_RGBA_ASTC_10x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_10x10_KHR\"] = 37819] = \"COMPRESSED_RGBA_ASTC_10x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_12x10_KHR\"] = 37820] = \"COMPRESSED_RGBA_ASTC_12x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_RGBA_ASTC_12x12_KHR\"] = 37821] = \"COMPRESSED_RGBA_ASTC_12x12_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR\"] = 37840] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR\"] = 37841] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR\"] = 37842] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR\"] = 37843] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR\"] = 37844] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR\"] = 37845] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR\"] = 37846] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR\"] = 37847] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR\"] = 37848] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR\"] = 37849] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR\"] = 37850] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR\"] = 37851] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR\"] = 37852] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR\";\n GLEnum[GLEnum[\"COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\"] = 37853] = \"COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\";\n // EXT_disjoint_timer_query\n /** The number of bits used to hold the query result for the given target. */\n GLEnum[GLEnum[\"QUERY_COUNTER_BITS_EXT\"] = 34916] = \"QUERY_COUNTER_BITS_EXT\";\n /** The currently active query. */\n GLEnum[GLEnum[\"CURRENT_QUERY_EXT\"] = 34917] = \"CURRENT_QUERY_EXT\";\n /** The query result. */\n GLEnum[GLEnum[\"QUERY_RESULT_EXT\"] = 34918] = \"QUERY_RESULT_EXT\";\n /** A Boolean indicating whether or not a query result is available. */\n GLEnum[GLEnum[\"QUERY_RESULT_AVAILABLE_EXT\"] = 34919] = \"QUERY_RESULT_AVAILABLE_EXT\";\n /** Elapsed time (in nanoseconds). */\n GLEnum[GLEnum[\"TIME_ELAPSED_EXT\"] = 35007] = \"TIME_ELAPSED_EXT\";\n /** The current time. */\n GLEnum[GLEnum[\"TIMESTAMP_EXT\"] = 36392] = \"TIMESTAMP_EXT\";\n /** A Boolean indicating whether or not the GPU performed any disjoint operation (lost context) */\n GLEnum[GLEnum[\"GPU_DISJOINT_EXT\"] = 36795] = \"GPU_DISJOINT_EXT\";\n // KHR_parallel_shader_compile https://registry.khronos.org/webgl/extensions/KHR_parallel_shader_compile\n /** a non-blocking poll operation, so that compile/link status availability can be queried without potentially incurring stalls */\n GLEnum[GLEnum[\"COMPLETION_STATUS_KHR\"] = 37297] = \"COMPLETION_STATUS_KHR\";\n // EXT_depth_clamp https://registry.khronos.org/webgl/extensions/EXT_depth_clamp/\n /** Disables depth clipping */\n GLEnum[GLEnum[\"DEPTH_CLAMP_EXT\"] = 34383] = \"DEPTH_CLAMP_EXT\";\n // WEBGL_provoking_vertex https://registry.khronos.org/webgl/extensions/WEBGL_provoking_vertex/\n /** Values of first vertex in primitive are used for flat shading */\n GLEnum[GLEnum[\"FIRST_VERTEX_CONVENTION_WEBGL\"] = 36429] = \"FIRST_VERTEX_CONVENTION_WEBGL\";\n /** Values of first vertex in primitive are used for flat shading */\n GLEnum[GLEnum[\"LAST_VERTEX_CONVENTION_WEBGL\"] = 36430] = \"LAST_VERTEX_CONVENTION_WEBGL\";\n /** Controls which vertex in primitive is used for flat shading */\n GLEnum[GLEnum[\"PROVOKING_VERTEX_WEBL\"] = 36431] = \"PROVOKING_VERTEX_WEBL\";\n // WEBGL_polygon_mode https://registry.khronos.org/webgl/extensions/WEBGL_polygon_mode/\n GLEnum[GLEnum[\"POLYGON_MODE_WEBGL\"] = 2880] = \"POLYGON_MODE_WEBGL\";\n GLEnum[GLEnum[\"POLYGON_OFFSET_LINE_WEBGL\"] = 10754] = \"POLYGON_OFFSET_LINE_WEBGL\";\n GLEnum[GLEnum[\"LINE_WEBGL\"] = 6913] = \"LINE_WEBGL\";\n GLEnum[GLEnum[\"FILL_WEBGL\"] = 6914] = \"FILL_WEBGL\";\n // WEBGL_clip_cull_distance https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/\n /** Max clip distances */\n GLEnum[GLEnum[\"MAX_CLIP_DISTANCES_WEBGL\"] = 3378] = \"MAX_CLIP_DISTANCES_WEBGL\";\n /** Max cull distances */\n GLEnum[GLEnum[\"MAX_CULL_DISTANCES_WEBGL\"] = 33529] = \"MAX_CULL_DISTANCES_WEBGL\";\n /** Max clip and cull distances */\n GLEnum[GLEnum[\"MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL\"] = 33530] = \"MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL\";\n /** Enable gl_ClipDistance[0] and gl_CullDistance[0] */\n GLEnum[GLEnum[\"CLIP_DISTANCE0_WEBGL\"] = 12288] = \"CLIP_DISTANCE0_WEBGL\";\n /** Enable gl_ClipDistance[1] and gl_CullDistance[1] */\n GLEnum[GLEnum[\"CLIP_DISTANCE1_WEBGL\"] = 12289] = \"CLIP_DISTANCE1_WEBGL\";\n /** Enable gl_ClipDistance[2] and gl_CullDistance[2] */\n GLEnum[GLEnum[\"CLIP_DISTANCE2_WEBGL\"] = 12290] = \"CLIP_DISTANCE2_WEBGL\";\n /** Enable gl_ClipDistance[3] and gl_CullDistance[3] */\n GLEnum[GLEnum[\"CLIP_DISTANCE3_WEBGL\"] = 12291] = \"CLIP_DISTANCE3_WEBGL\";\n /** Enable gl_ClipDistance[4] and gl_CullDistance[4] */\n GLEnum[GLEnum[\"CLIP_DISTANCE4_WEBGL\"] = 12292] = \"CLIP_DISTANCE4_WEBGL\";\n /** Enable gl_ClipDistance[5] and gl_CullDistance[5] */\n GLEnum[GLEnum[\"CLIP_DISTANCE5_WEBGL\"] = 12293] = \"CLIP_DISTANCE5_WEBGL\";\n /** Enable gl_ClipDistance[6] and gl_CullDistance[6] */\n GLEnum[GLEnum[\"CLIP_DISTANCE6_WEBGL\"] = 12294] = \"CLIP_DISTANCE6_WEBGL\";\n /** Enable gl_ClipDistance[7] and gl_CullDistance[7] */\n GLEnum[GLEnum[\"CLIP_DISTANCE7_WEBGL\"] = 12295] = \"CLIP_DISTANCE7_WEBGL\";\n /** EXT_polygon_offset_clamp https://registry.khronos.org/webgl/extensions/EXT_polygon_offset_clamp/ */\n GLEnum[GLEnum[\"POLYGON_OFFSET_CLAMP_EXT\"] = 36379] = \"POLYGON_OFFSET_CLAMP_EXT\";\n /** EXT_clip_control https://registry.khronos.org/webgl/extensions/EXT_clip_control/ */\n GLEnum[GLEnum[\"LOWER_LEFT_EXT\"] = 36001] = \"LOWER_LEFT_EXT\";\n GLEnum[GLEnum[\"UPPER_LEFT_EXT\"] = 36002] = \"UPPER_LEFT_EXT\";\n GLEnum[GLEnum[\"NEGATIVE_ONE_TO_ONE_EXT\"] = 37726] = \"NEGATIVE_ONE_TO_ONE_EXT\";\n GLEnum[GLEnum[\"ZERO_TO_ONE_EXT\"] = 37727] = \"ZERO_TO_ONE_EXT\";\n GLEnum[GLEnum[\"CLIP_ORIGIN_EXT\"] = 37724] = \"CLIP_ORIGIN_EXT\";\n GLEnum[GLEnum[\"CLIP_DEPTH_MODE_EXT\"] = 37725] = \"CLIP_DEPTH_MODE_EXT\";\n /** WEBGL_blend_func_extended https://registry.khronos.org/webgl/extensions/WEBGL_blend_func_extended/ */\n GLEnum[GLEnum[\"SRC1_COLOR_WEBGL\"] = 35065] = \"SRC1_COLOR_WEBGL\";\n GLEnum[GLEnum[\"SRC1_ALPHA_WEBGL\"] = 34185] = \"SRC1_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC1_COLOR_WEBGL\"] = 35066] = \"ONE_MINUS_SRC1_COLOR_WEBGL\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC1_ALPHA_WEBGL\"] = 35067] = \"ONE_MINUS_SRC1_ALPHA_WEBGL\";\n GLEnum[GLEnum[\"MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL\"] = 35068] = \"MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL\";\n /** EXT_texture_mirror_clamp_to_edge https://registry.khronos.org/webgl/extensions/EXT_texture_mirror_clamp_to_edge/ */\n GLEnum[GLEnum[\"MIRROR_CLAMP_TO_EDGE_EXT\"] = 34627] = \"MIRROR_CLAMP_TO_EDGE_EXT\";\n})(GLEnum || (GLEnum = {}));\nexport { GLEnum as GL };\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log, loadScript } from '@luma.gl/core';\n// Rename constant to prevent inlining. We need the full set of constants for generating debug strings.\nimport { GL as GLEnum } from '@luma.gl/constants';\nimport { isBrowser } from '@probe.gl/env';\nconst WEBGL_DEBUG_CDN_URL = 'https://unpkg.com/webgl-debug@2.0.1/index.js';\n// Helper to get shared context data\nfunction getWebGLContextData(gl) {\n gl.luma = gl.luma || {};\n return gl.luma;\n}\n/**\n * Loads Khronos WebGLDeveloperTools from CDN if not already installed\n * const WebGLDebugUtils = require('webgl-debug');\n * @see https://github.com/KhronosGroup/WebGLDeveloperTools\n * @see https://github.com/vorg/webgl-debug\n */\nexport async function loadWebGLDeveloperTools() {\n if (isBrowser() && !globalThis.WebGLDebugUtils) {\n globalThis.global = globalThis.global || globalThis;\n // @ts-expect-error Developer tools expects global to be set\n globalThis.global.module = {};\n await loadScript(WEBGL_DEBUG_CDN_URL);\n }\n}\n// Returns (a potentially new) context with debug instrumentation turned off or on.\n// Note that this actually returns a new context\nexport function makeDebugContext(gl, props = {}) {\n // Return null to ensure we don't try to create a context in this case (TODO what case is that?)\n if (!gl) {\n return null;\n }\n return props.debug ? getDebugContext(gl, props) : getRealContext(gl);\n}\n// Returns the real context from either of the real/debug contexts\nfunction getRealContext(gl) {\n const data = getWebGLContextData(gl);\n // If the context has a realContext member, it is a debug context so return the realContext\n return data.realContext ? data.realContext : gl;\n}\n// Returns the debug context from either of the real/debug contexts\nfunction getDebugContext(gl, props) {\n if (!globalThis.WebGLDebugUtils) {\n log.warn('webgl-debug not loaded')();\n return gl;\n }\n const data = getWebGLContextData(gl);\n // If this already has a debug context, return it.\n if (data.debugContext) {\n return data.debugContext;\n }\n // Create a new debug context\n globalThis.WebGLDebugUtils.init({ ...GLEnum, ...gl });\n const glDebug = globalThis.WebGLDebugUtils.makeDebugContext(gl, onGLError.bind(null, props), onValidateGLFunc.bind(null, props));\n // Make sure we have all WebGL2 and extension constants (todo dynamic import to circumvent minification?)\n for (const key in GLEnum) {\n if (!(key in glDebug) && typeof GLEnum[key] === 'number') {\n glDebug[key] = GLEnum[key];\n }\n }\n // Ensure we have a clean prototype on the instrumented object\n // Note: setPrototypeOf does come with perf warnings, but we already take a bigger perf reduction\n // by synchronizing the WebGL errors after each WebGL call.\n class WebGLDebugContext {\n }\n Object.setPrototypeOf(glDebug, Object.getPrototypeOf(gl));\n Object.setPrototypeOf(WebGLDebugContext, glDebug);\n const debugContext = Object.create(WebGLDebugContext);\n // Store the debug context\n data.realContext = gl;\n data.debugContext = debugContext;\n debugContext.debug = true;\n // Return it\n return debugContext;\n}\n// DEBUG TRACING\nfunction getFunctionString(functionName, functionArgs) {\n // Cover bug in webgl-debug-tools\n functionArgs = Array.from(functionArgs).map(arg => (arg === undefined ? 'undefined' : arg));\n let args = globalThis.WebGLDebugUtils.glFunctionArgsToString(functionName, functionArgs);\n args = `${args.slice(0, 100)}${args.length > 100 ? '...' : ''}`;\n return `gl.${functionName}(${args})`;\n}\nfunction onGLError(props, err, functionName, args) {\n // Cover bug in webgl-debug-tools\n args = Array.from(args).map(arg => (arg === undefined ? 'undefined' : arg));\n const errorMessage = globalThis.WebGLDebugUtils.glEnumToString(err);\n const functionArgs = globalThis.WebGLDebugUtils.glFunctionArgsToString(functionName, args);\n const message = `${errorMessage} in gl.${functionName}(${functionArgs})`;\n log.error(message)();\n debugger; // eslint-disable-line\n if (props.throwOnError) {\n throw new Error(message);\n }\n}\n// Don't generate function string until it is needed\nfunction onValidateGLFunc(props, functionName, functionArgs) {\n let functionString = '';\n if (log.level >= 1) {\n functionString = getFunctionString(functionName, functionArgs);\n log.log(1, functionString)();\n }\n // If array of breakpoint strings supplied, check if any of them is contained in current GLEnum function\n if (props.break && props.break.length > 0) {\n functionString = functionString || getFunctionString(functionName, functionArgs);\n const isBreakpoint = props.break.every((breakOn) => functionString.indexOf(breakOn) !== -1);\n if (isBreakpoint) {\n debugger; // eslint-disable-line\n }\n }\n for (const arg of functionArgs) {\n if (arg === undefined) {\n functionString = functionString || getFunctionString(functionName, functionArgs);\n if (props.throwOnError) {\n throw new Error(`Undefined argument: ${functionString}`);\n }\n else {\n log.error(`Undefined argument: ${functionString}`)();\n debugger; // eslint-disable-line\n }\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** @returns annotated errors or warnings */\nexport function formatCompilerLog(shaderLog, source, options) {\n let formattedLog = '';\n const lines = source.split(/\\r?\\n/);\n const log = shaderLog.slice().sort((a, b) => a.lineNum - b.lineNum);\n switch (options?.showSourceCode || 'no') {\n case 'all':\n // Parse the error - note: browser and driver dependent\n let currentMessage = 0;\n for (let lineNum = 1; lineNum <= lines.length; lineNum++) {\n formattedLog += getNumberedLine(lines[lineNum - 1], lineNum, options);\n while (log.length > currentMessage && log[currentMessage].lineNum === lineNum) {\n const message = log[currentMessage++];\n formattedLog += formatCompilerMessage(message, lines, message.lineNum, {\n ...options,\n inlineSource: false\n });\n }\n }\n return formattedLog;\n case 'issues':\n case 'no':\n // Parse the error - note: browser and driver dependent\n for (const message of shaderLog) {\n formattedLog += formatCompilerMessage(message, lines, message.lineNum, {\n inlineSource: options?.showSourceCode !== 'no'\n });\n }\n return formattedLog;\n }\n}\n// Helpers\n/** Format one message */\nfunction formatCompilerMessage(message, lines, lineNum, options) {\n if (options?.inlineSource) {\n const numberedLines = getNumberedLines(lines, lineNum);\n // If we got error position on line add a `^^^` indicator on next line\n const positionIndicator = message.linePos > 0 ? `${' '.repeat(message.linePos + 5)}^^^\\n` : '';\n return `\n${numberedLines}${positionIndicator}${message.type.toUpperCase()}: ${message.message}\n\n`;\n }\n return options?.html\n ? `
${message.type.toUpperCase()}: ${message.message}
`\n : `${message.type.toUpperCase()}: ${message.message}`;\n}\nfunction getNumberedLines(lines, lineNum, options) {\n let numberedLines = '';\n for (let lineIndex = lineNum - 2; lineIndex <= lineNum; lineIndex++) {\n const sourceLine = lines[lineIndex - 1];\n if (sourceLine !== undefined) {\n numberedLines += getNumberedLine(sourceLine, lineNum, options);\n }\n }\n return numberedLines;\n}\nfunction getNumberedLine(line, lineNum, options) {\n const escapedLine = options?.html ? escapeHTML(line) : line;\n return `${padLeft(String(lineNum), 4)}: ${escapedLine}${options?.html ? '
' : '\\n'}`;\n}\n/**\n * Pads a string with a number of spaces (space characters) to the left\n * @param {String} string - string to pad\n * @param {Number} digits - number of spaces to add\n * @return {String} string - The padded string\n */\nfunction padLeft(string, paddedLength) {\n let result = '';\n for (let i = string.length; i < paddedLength; ++i) {\n result += ' ';\n }\n return result + string;\n}\nfunction escapeHTML(unsafe) {\n return unsafe\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", ''');\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Extracts information from shader source code */\nexport function getShaderInfo(source, defaultName) {\n return {\n name: getShaderName(source, defaultName),\n language: 'glsl',\n version: getShaderVersion(source)\n };\n}\n/** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */\nfunction getShaderName(shader, defaultName = 'unnamed') {\n const SHADER_NAME_REGEXP = /#define[\\s*]SHADER_NAME[\\s*]([A-Za-z0-9_-]+)[\\s*]/;\n const match = SHADER_NAME_REGEXP.exec(shader);\n return match ? match[1] : defaultName;\n}\n/** returns GLSL shader version of given shader string */\nfunction getShaderVersion(source) {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n if (words && words.length >= 2 && words[0] === '#version') {\n const v = parseInt(words[1], 10);\n if (Number.isFinite(v)) {\n version = v;\n }\n }\n return version;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n// import { log } from '../../utils/log';\nimport { uid } from \"../../utils/utils.js\";\nimport { formatCompilerLog } from \"../../lib/compiler-log/format-compiler-log.js\";\nimport { getShaderInfo } from \"../../lib/compiler-log/get-shader-info.js\";\n/**\n * Immutable Shader object\n * In WebGPU the handle can be copied between threads\n */\nexport class Shader extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n language: 'auto',\n stage: undefined,\n source: '',\n sourceMap: null,\n entryPoint: 'main',\n debug: 'errors'\n };\n get [Symbol.toStringTag]() {\n return 'Shader';\n }\n /** The stage of this shader */\n stage;\n /** The source code of this shader */\n source;\n /** The compilation status of the shader. 'pending' if compilation is asynchronous, and on production */\n compilationStatus = 'pending';\n /** Create a new Shader instance */\n constructor(device, props) {\n super(device, { id: getShaderIdFromProps(props), ...props }, Shader.defaultProps);\n this.stage = this.props.stage;\n this.source = this.props.source;\n }\n /** Get compiler log synchronously (WebGL only) */\n getCompilationInfoSync() {\n return null;\n }\n /** Get translated shader source in host platform's native language (HLSL, GLSL, and even GLSL ES), if available */\n getTranslatedSource() {\n return null;\n }\n // PORTABLE HELPERS\n /** In browser logging of errors */\n async debugShader(trigger = this.props.debug) {\n switch (trigger) {\n case 'never':\n return;\n case 'errors':\n // On WebGL - Don't extract the log unless errors\n if (this.compilationStatus === 'success') {\n return;\n }\n break;\n case 'warnings':\n case 'always':\n break;\n }\n const messages = await this.getCompilationInfo();\n if (this.props.debug === 'warnings' && messages?.length === 0) {\n return;\n }\n this._displayShaderLog(messages);\n }\n // PRIVATE\n /** In-browser UI logging of errors */\n _displayShaderLog(messages) {\n // Return if under Node.js / incomplete `document` polyfills\n if (typeof document === 'undefined' || !document?.createElement) {\n return;\n }\n const shaderName = getShaderInfo(this.source).name;\n const shaderTitle = `${this.stage} ${shaderName}`;\n let htmlLog = formatCompilerLog(messages, this.source, { showSourceCode: 'all', html: true });\n // Show translated source if available\n const translatedSource = this.getTranslatedSource();\n if (translatedSource) {\n htmlLog += `

Translated Source



${translatedSource}
`;\n }\n // Make it clickable so we can copy to clipboard\n const button = document.createElement('Button');\n button.innerHTML = `\n

Shader Compilation Error in ${shaderTitle}



\n
\n${htmlLog}\n
`;\n button.style.top = '10px';\n button.style.left = '10px';\n button.style.position = 'absolute';\n button.style.zIndex = '9999';\n button.style.width = '100%';\n button.style.textAlign = 'left';\n document.body.appendChild(button);\n const errors = document.getElementsByClassName('luma-compiler-log-error');\n if (errors[0]?.scrollIntoView) {\n errors[0].scrollIntoView();\n }\n // TODO - add a small embedded copy button (instead of main button)\n button.onclick = () => {\n // const source = this.source.replaceAll('\\n', '
');\n const dataURI = `data:text/plain,${encodeURIComponent(this.source)}`;\n navigator.clipboard.writeText(dataURI);\n };\n // TODO - add a small embedded close button\n }\n}\n// HELPERS\n/** Deduce an id, from shader source, or supplied id, or shader type */\nfunction getShaderIdFromProps(props) {\n return getShaderInfo(props.source).name || props.id || uid(`unnamed ${props.stage}-shader`);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.\n * This follows documented WebGL conventions for compilation logs.\n * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)\n */\nexport function parseShaderCompilerLog(errLog) {\n // Parse the error - note: browser and driver dependent\n const lines = errLog.split(/\\r?\\n/);\n const messages = [];\n for (const line of lines) {\n if (line.length <= 1) {\n continue; // eslint-disable-line no-continue\n }\n const segments = line.split(':');\n // Check for messages with no line information `ERROR: unsupported shader version`\n if (segments.length === 2) {\n const [messageType, message] = segments;\n messages.push({\n message: message.trim(),\n type: getMessageType(messageType),\n lineNum: 0,\n linePos: 0\n });\n continue; // eslint-disable-line no-continue\n }\n const [messageType, linePosition, lineNumber, ...rest] = segments;\n let lineNum = parseInt(lineNumber, 10);\n if (isNaN(lineNum)) {\n lineNum = 0;\n }\n let linePos = parseInt(linePosition, 10);\n if (isNaN(linePos)) {\n linePos = 0;\n }\n messages.push({\n message: rest.join(':').trim(),\n type: getMessageType(messageType),\n lineNum,\n linePos // TODO\n });\n }\n return messages;\n}\n/** Ensure supported type */\nfunction getMessageType(messageType) {\n const MESSAGE_TYPES = ['warning', 'error', 'info'];\n const lowerCaseType = messageType.toLowerCase();\n return (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info');\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Shader, log } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { parseShaderCompilerLog } from \"../helpers/parse-shader-compiler-log.js\";\n/**\n * An immutable compiled shader program that execute portions of the GPU Pipeline\n */\nexport class WEBGLShader extends Shader {\n device;\n handle;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n switch (this.props.stage) {\n case 'vertex':\n this.handle = this.props.handle || this.device.gl.createShader(35633);\n break;\n case 'fragment':\n this.handle = this.props.handle || this.device.gl.createShader(35632);\n break;\n default:\n throw new Error(this.props.stage);\n }\n this._compile(this.source);\n }\n destroy() {\n if (this.handle) {\n this.removeStats();\n this.device.gl.deleteShader(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n async getCompilationInfo() {\n await this._waitForCompilationComplete();\n return this.getCompilationInfoSync();\n }\n getCompilationInfoSync() {\n const log = this.device.gl.getShaderInfoLog(this.handle);\n return parseShaderCompilerLog(log);\n }\n getTranslatedSource() {\n const extensions = this.device.getExtension('WEBGL_debug_shaders');\n const ext = extensions.WEBGL_debug_shaders;\n return ext?.getTranslatedShaderSource(this.handle);\n }\n // PRIVATE METHODS\n /** Compile a shader and get compilation status */\n async _compile(source) {\n const addGLSLVersion = (source) => source.startsWith('#version ') ? source : `#version 100\\n${source}`;\n source = addGLSLVersion(source);\n const { gl } = this.device;\n gl.shaderSource(this.handle, source);\n gl.compileShader(this.handle);\n // For performance reasons, avoid checking shader compilation errors on production\n if (log.level === 0) {\n this.compilationStatus = 'pending';\n return;\n }\n // Sync case - slower, but advantage is that it throws in the constructor, making break on error more useful\n if (!this.device.features.has('compilation-status-async-webgl')) {\n this._getCompilationStatus();\n // The `Shader` base class will determine if debug window should be opened based on this.compilationStatus\n this.debugShader();\n if (this.compilationStatus === 'error') {\n throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`);\n }\n return;\n }\n // async case\n log.once(1, 'Shader compilation is asynchronous')();\n await this._waitForCompilationComplete();\n log.info(2, `Shader ${this.id} - async compilation complete: ${this.compilationStatus}`)();\n this._getCompilationStatus();\n // The `Shader` base class will determine if debug window should be opened based on this.compilationStatus\n this.debugShader();\n }\n /** Use KHR_parallel_shader_compile extension if available */\n async _waitForCompilationComplete() {\n const waitMs = async (ms) => await new Promise(resolve => setTimeout(resolve, ms));\n const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)\n // If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking\n if (!this.device.features.has('compilation-status-async-webgl')) {\n await waitMs(DELAY_MS);\n return;\n }\n const { gl } = this.device;\n for (;;) {\n const complete = gl.getShaderParameter(this.handle, 37297);\n if (complete) {\n return;\n }\n await waitMs(DELAY_MS);\n }\n }\n /**\n * Get the shader compilation status\n * TODO - Load log even when no error reported, to catch warnings?\n * https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n */\n _getCompilationStatus() {\n this.compilationStatus = this.device.gl.getShaderParameter(this.handle, 35713)\n ? 'success'\n : 'error';\n }\n}\n// TODO - Original code from luma.gl v8 - keep until new debug functionality has matured\n// if (!compilationSuccess) {\n// const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];\n// const messages = parsedLog.filter(message => message.type === 'error');\n// const formattedLog = formatCompilerLog(messages, source, {showSourceCode: 'all', html: true});\n// const shaderDescription = `${this.stage} shader ${shaderName}`;\n// log.error(`GLSL compilation errors in ${shaderDescription}\\n${formattedLog}`)();\n// displayShaderLog(parsedLog, source, shaderName);\n// }\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// import {Binding} from '../types/shader-layout';\nimport { Resource } from \"./resource.js\";\n/**\n * A RenderPass instance is a required parameter to all draw calls.\n *\n * It holds a combination of\n * - render targets (specified via a framebuffer)\n * - clear colors, read/write, discard information for the framebuffer attachments\n * - a couple of mutable parameters ()\n */\nexport class RenderPass extends Resource {\n /** Default properties for RenderPass */\n static defaultProps = {\n ...Resource.defaultProps,\n framebuffer: null,\n parameters: undefined,\n clearColor: [0, 0, 0, 0],\n clearDepth: 1,\n clearStencil: 0,\n depthReadOnly: false,\n stencilReadOnly: false,\n discard: false,\n occlusionQuerySet: undefined,\n timestampQuerySet: undefined,\n beginTimestampIndex: undefined,\n endTimestampIndex: undefined\n };\n get [Symbol.toStringTag]() {\n return 'RenderPass';\n }\n constructor(device, props) {\n super(device, props, RenderPass.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPass } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { withGLParameters } from \"../../context/state-tracker/with-parameters.js\";\nimport { setGLParameters } from \"../../context/parameters/unified-parameter-api.js\";\nimport { pushContextState, popContextState } from \"../../context/state-tracker/track-context-state.js\";\n// Should collapse during minification\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\nconst GL_COLOR = 0x1800;\nconst COLOR_CHANNELS = [0x1, 0x2, 0x4, 0x8]; // GPUColorWrite RED, GREEN, BLUE, ALPHA\nexport class WEBGLRenderPass extends RenderPass {\n device;\n /** Parameters that should be applied before each draw call */\n glParameters;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n // TODO - do parameters (scissorRect) affect the clear operation?\n pushContextState(this.device.gl);\n this.setParameters(this.props.parameters);\n // Hack - for now WebGL draws in \"immediate mode\" (instead of queueing the operations)...\n this.clear();\n }\n end() {\n popContextState(this.device.gl);\n // should add commands to CommandEncoder.\n }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n // executeBundles(bundles: Iterable): void;\n /**\n * Maps RenderPass parameters to GL parameters\n */\n setParameters(parameters = {}) {\n const glParameters = { ...this.glParameters };\n // Framebuffers are specified using parameters in WebGL\n if (this.props.framebuffer) {\n glParameters.framebuffer = this.props.framebuffer;\n }\n if (this.props.depthReadOnly) {\n glParameters.depthMask = !this.props.depthReadOnly;\n }\n glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;\n glParameters[35977] = this.props.discard;\n // Map the four renderpass parameters to WebGL parameters\n if (parameters.viewport) {\n // WebGPU viewports are 6 coordinates (X, Y, Z)\n if (parameters.viewport.length >= 6) {\n glParameters.viewport = parameters.viewport.slice(0, 4);\n glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];\n }\n else {\n // WebGL viewports are 4 coordinates (X, Y)\n glParameters.viewport = parameters.viewport;\n }\n }\n if (parameters.scissorRect) {\n glParameters.scissorTest = true;\n glParameters.scissor = parameters.scissorRect;\n }\n if (parameters.blendConstant) {\n glParameters.blendColor = parameters.blendConstant;\n }\n if (parameters.stencilReference) {\n // eslint-disable-next-line no-console\n console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');\n // parameters.stencilFunc = [func, ref, mask];\n // Does this work?\n parameters[2967] = parameters.stencilReference;\n }\n if (parameters.colorMask) {\n glParameters.colorMask = COLOR_CHANNELS.map(channel => Boolean(channel & parameters.colorMask));\n }\n this.glParameters = glParameters;\n setGLParameters(this.device.gl, glParameters);\n }\n beginOcclusionQuery(queryIndex) {\n const webglQuerySet = this.props.occlusionQuerySet;\n webglQuerySet?.beginOcclusionQuery();\n }\n endOcclusionQuery() {\n const webglQuerySet = this.props.occlusionQuerySet;\n webglQuerySet?.endOcclusionQuery();\n }\n // PRIVATE\n /**\n * Optionally clears depth, color and stencil buffers based on parameters\n */\n clear() {\n const glParameters = { ...this.glParameters };\n let clearMask = 0;\n if (this.props.clearColor !== false) {\n clearMask |= GL_COLOR_BUFFER_BIT;\n glParameters.clearColor = this.props.clearColor;\n }\n if (this.props.clearDepth !== false) {\n clearMask |= GL_DEPTH_BUFFER_BIT;\n glParameters.clearDepth = this.props.clearDepth;\n }\n if (this.props.clearStencil !== false) {\n clearMask |= GL_STENCIL_BUFFER_BIT;\n glParameters.clearStencil = this.props.clearStencil;\n }\n if (clearMask !== 0) {\n // Temporarily set any clear \"colors\" and call clear\n withGLParameters(this.device.gl, glParameters, () => {\n this.device.gl.clear(clearMask);\n });\n // TODO - clear multiple color attachments\n // for (attachment of this.framebuffer.colorAttachments) {\n // this.clearColorBuffer\n // }\n }\n }\n /**\n * WebGL2 - clear a specific color buffer\n */\n clearColorBuffer(drawBuffer = 0, value = [0, 0, 0, 0]) {\n withGLParameters(this.device.gl, { framebuffer: this.props.framebuffer }, () => {\n // Method selection per OpenGL ES 3 docs\n switch (value.constructor) {\n case Int32Array:\n this.device.gl.clearBufferiv(GL_COLOR, drawBuffer, value);\n break;\n case Uint32Array:\n this.device.gl.clearBufferuiv(GL_COLOR, drawBuffer, value);\n break;\n case Float32Array:\n default:\n this.device.gl.clearBufferfv(GL_COLOR, drawBuffer, value);\n break;\n }\n });\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// import {normalizeAttributeMap} from '../helpers/attribute-bindings';\nimport { Resource } from \"./resource.js\";\n/**\n * A compiled and linked shader program\n */\nexport class RenderPipeline extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n vs: null,\n vertexEntryPoint: 'vertexMain',\n vsConstants: {},\n fs: null,\n fragmentEntryPoint: 'fragmentMain',\n fsConstants: {},\n shaderLayout: null,\n bufferLayout: [],\n topology: 'triangle-list',\n parameters: {},\n // isInstanced: false,\n // instanceCount: 0,\n // vertexCount: 0,\n bindings: {},\n uniforms: {}\n };\n get [Symbol.toStringTag]() {\n return 'RenderPipeline';\n }\n /** The merged layout */\n shaderLayout;\n /** Buffer map describing buffer interleaving etc */\n bufferLayout;\n /** The linking status of the pipeline. 'pending' if linking is asynchronous, and on production */\n linkStatus = 'pending';\n /** The hash of the pipeline */\n hash = '';\n constructor(device, props) {\n super(device, props, RenderPipeline.defaultProps);\n this.shaderLayout = this.props.shaderLayout;\n this.bufferLayout = this.props.bufferLayout || [];\n }\n // DEPRECATED METHODS\n /**\n * Uniforms\n * @deprecated Use uniforms buffers\n * @note textures, samplers and uniform buffers should be set via `setBindings()`, these are not considered uniforms.\n * @note In WebGL uniforms have a performance penalty, they are reset before each call to enable pipeline sharing.\n */\n setUniformsWebGL(uniforms) {\n throw new Error('Use uniform blocks');\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Check is an array is a typed array\n * @param value value to be tested\n * @returns input as TypedArray, or null\n * @todo this should be provided by @math.gl/types\n */\nexport function isTypedArray(value) {\n return ArrayBuffer.isView(value) && !(value instanceof DataView) ? value : null;\n}\n/**\n * Check is an array is a numeric array (typed array or array of numbers)\n * @param value value to be tested\n * @returns input as NumberArray, or null\n * @todo this should be provided by @math.gl/types\n */\nexport function isNumberArray(value) {\n if (Array.isArray(value)) {\n return value.length === 0 || typeof value[0] === 'number' ? value : null;\n }\n return isTypedArray(value);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isNumberArray } from \"../../utils/is-array.js\";\nexport function isUniformValue(value) {\n return isNumberArray(value) !== null || typeof value === 'number' || typeof value === 'boolean';\n}\nexport function splitUniformsAndBindings(uniforms) {\n const result = { bindings: {}, uniforms: {} };\n Object.keys(uniforms).forEach(name => {\n const uniform = uniforms[name];\n if (isUniformValue(uniform)) {\n result.uniforms[name] = uniform;\n }\n else {\n result.bindings[name] = uniform;\n }\n });\n return result;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Decodes a vertex type, returning byte length and flags (integer, signed, normalized) */\nexport function decodeShaderAttributeType(attributeType) {\n const [dataType, components] = TYPE_INFO[attributeType];\n const integer = dataType === 'i32' || dataType === 'u32';\n const signed = dataType !== 'u32';\n const byteLength = TYPE_SIZES[dataType] * components;\n const defaultVertexFormat = getCompatibleVertexFormat(dataType, components);\n return {\n dataType,\n components,\n defaultVertexFormat,\n byteLength,\n integer,\n signed\n };\n}\n/** Get the \"default\" vertex format for a certain shader data type */\nfunction getCompatibleVertexFormat(dataType, components) {\n let vertexType;\n switch (dataType) {\n case 'f32':\n vertexType = 'float32';\n break;\n case 'i32':\n vertexType = 'sint32';\n break;\n case 'u32':\n vertexType = 'uint32';\n break;\n case 'f16':\n return components <= 2 ? 'float16x2' : 'float16x4';\n }\n // TODO logic does not work for float16\n if (components === 1) {\n return vertexType;\n }\n return `${vertexType}x${components}`;\n}\n/** All valid shader attribute types. A table guarantees exhaustive list and fast execution */\nconst TYPE_INFO = {\n f32: ['f32', 1],\n 'vec2': ['f32', 2],\n 'vec3': ['f32', 3],\n 'vec4': ['f32', 4],\n f16: ['f16', 1],\n 'vec2': ['f16', 2],\n 'vec3': ['f16', 3],\n 'vec4': ['f16', 4],\n i32: ['i32', 1],\n 'vec2': ['i32', 2],\n 'vec3': ['i32', 3],\n 'vec4': ['i32', 4],\n u32: ['u32', 1],\n 'vec2': ['u32', 2],\n 'vec3': ['u32', 3],\n 'vec4': ['u32', 4]\n};\nconst TYPE_SIZES = {\n f32: 4,\n f16: 2,\n i32: 4,\n u32: 4\n // 'bool-webgl': 4,\n};\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { decodeVertexType } from \"./decode-data-type.js\";\n/**\n * Decodes a vertex format, returning type, components, byte length and flags (integer, signed, normalized)\n */\nexport function decodeVertexFormat(format) {\n // Strip the -webgl ending if present\n let webglOnly;\n if (format.endsWith('-webgl')) {\n format.replace('-webgl', '');\n webglOnly = true;\n }\n // split components from type\n const [type_, count] = format.split('x');\n const type = type_;\n const components = (count ? parseInt(count) : 1);\n // decode the type\n const decodedType = decodeVertexType(type);\n const result = {\n type,\n components,\n byteLength: decodedType.byteLength * components,\n integer: decodedType.integer,\n signed: decodedType.signed,\n normalized: decodedType.normalized\n };\n if (webglOnly) {\n result.webglOnly = true;\n }\n return result;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from \"../../utils/log.js\";\nimport { decodeShaderAttributeType } from \"../type-utils/decode-attribute-type.js\";\nimport { decodeVertexFormat } from \"../type-utils/decode-vertex-format.js\";\n/**\n * Map from \"attribute names\" to \"resolved attribute infos\"\n * containing information about both buffer layouts and shader attribute declarations\n */\nexport function getAttributeInfosFromLayouts(shaderLayout, bufferLayout) {\n const attributeInfos = {};\n for (const attribute of shaderLayout.attributes) {\n attributeInfos[attribute.name] = getAttributeInfoFromLayouts(shaderLayout, bufferLayout, attribute.name);\n }\n return attributeInfos;\n}\n/**\n * Array indexed by \"location\" holding \"resolved attribute infos\"\n */\nexport function getAttributeInfosByLocation(shaderLayout, bufferLayout, maxVertexAttributes = 16) {\n const attributeInfos = getAttributeInfosFromLayouts(shaderLayout, bufferLayout);\n const locationInfos = new Array(maxVertexAttributes).fill(null);\n for (const attributeInfo of Object.values(attributeInfos)) {\n locationInfos[attributeInfo.location] = attributeInfo;\n }\n return locationInfos;\n}\n/**\n * Get the combined information from a shader layout and a buffer layout for a specific attribute\n */\nfunction getAttributeInfoFromLayouts(shaderLayout, bufferLayout, name) {\n const shaderDeclaration = getAttributeFromShaderLayout(shaderLayout, name);\n const bufferMapping = getAttributeFromBufferLayout(bufferLayout, name);\n // TODO should no longer happen\n if (!shaderDeclaration) {\n // || !bufferMapping\n return null;\n }\n const attributeTypeInfo = decodeShaderAttributeType(shaderDeclaration.type);\n const vertexFormat = bufferMapping?.vertexFormat || attributeTypeInfo.defaultVertexFormat;\n const vertexFormatInfo = decodeVertexFormat(vertexFormat);\n return {\n attributeName: bufferMapping?.attributeName || shaderDeclaration.name,\n bufferName: bufferMapping?.bufferName || shaderDeclaration.name,\n location: shaderDeclaration.location,\n shaderType: shaderDeclaration.type,\n shaderDataType: attributeTypeInfo.dataType,\n shaderComponents: attributeTypeInfo.components,\n vertexFormat,\n bufferDataType: vertexFormatInfo.type,\n bufferComponents: vertexFormatInfo.components,\n // normalized is a property of the buffer's vertex format\n normalized: vertexFormatInfo.normalized,\n // integer is a property of the shader declaration\n integer: attributeTypeInfo.integer,\n stepMode: bufferMapping?.stepMode || shaderDeclaration.stepMode,\n byteOffset: bufferMapping?.byteOffset || 0,\n byteStride: bufferMapping?.byteStride || 0\n };\n}\nfunction getAttributeFromShaderLayout(shaderLayout, name) {\n const attribute = shaderLayout.attributes.find(attr => attr.name === name);\n if (!attribute) {\n log.warn(`shader layout attribute \"${name}\" not present in shader`);\n }\n return attribute || null;\n}\nfunction getAttributeFromBufferLayout(bufferLayouts, name) {\n // Check that bufferLayouts are valid (each either has format or attribute)\n checkBufferLayouts(bufferLayouts);\n let bufferLayoutInfo = getAttributeFromShortHand(bufferLayouts, name);\n if (bufferLayoutInfo) {\n return bufferLayoutInfo;\n }\n bufferLayoutInfo = getAttributeFromAttributesList(bufferLayouts, name);\n if (bufferLayoutInfo) {\n return bufferLayoutInfo;\n }\n // Didn't find...\n log.warn(`layout for attribute \"${name}\" not present in buffer layout`);\n return null;\n}\n/** Check that bufferLayouts are valid (each either has format or attribute) */\nfunction checkBufferLayouts(bufferLayouts) {\n for (const bufferLayout of bufferLayouts) {\n if ((bufferLayout.attributes && bufferLayout.format) ||\n (!bufferLayout.attributes && !bufferLayout.format)) {\n log.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`);\n }\n }\n}\n/** Get attribute from format shorthand if specified */\nfunction getAttributeFromShortHand(bufferLayouts, name) {\n for (const bufferLayout of bufferLayouts) {\n if (bufferLayout.format && bufferLayout.name === name) {\n return {\n attributeName: bufferLayout.name,\n bufferName: name,\n stepMode: bufferLayout.stepMode,\n vertexFormat: bufferLayout.format,\n // If offset is needed, use `attributes` field.\n byteOffset: 0,\n byteStride: bufferLayout.byteStride || 0\n };\n }\n }\n return null;\n}\n/**\n * Search attribute mappings (e.g. interleaved attributes) for buffer mapping.\n * Not the name of the buffer might be the same as one of the interleaved attributes.\n */\nfunction getAttributeFromAttributesList(bufferLayouts, name) {\n for (const bufferLayout of bufferLayouts) {\n let byteStride = bufferLayout.byteStride;\n // Calculate a default byte stride if not provided\n if (typeof bufferLayout.byteStride !== 'number') {\n for (const attributeMapping of bufferLayout.attributes || []) {\n const info = decodeVertexFormat(attributeMapping.format);\n byteStride += info.byteLength;\n }\n }\n const attributeMapping = bufferLayout.attributes?.find(mapping => mapping.attribute === name);\n if (attributeMapping) {\n return {\n attributeName: attributeMapping.attribute,\n bufferName: bufferLayout.name,\n stepMode: bufferLayout.stepMode,\n vertexFormat: attributeMapping.format,\n byteOffset: attributeMapping.byteOffset,\n byteStride\n };\n }\n }\n return null;\n}\n/**\n * Merges an provided shader layout into a base shader layout\n * In WebGL, this allows the auto generated shader layout to be overridden by the application\n * Typically to change the format of the vertex attributes (from float32x4 to uint8x4 etc).\n * @todo Drop this? Aren't all use cases covered by mergeBufferLayout()?\n */\nexport function mergeShaderLayout(baseLayout, overrideLayout) {\n // Deep clone the base layout\n const mergedLayout = {\n ...baseLayout,\n attributes: baseLayout.attributes.map(attribute => ({ ...attribute }))\n };\n // Merge the attributes\n for (const attribute of overrideLayout?.attributes || []) {\n const baseAttribute = mergedLayout.attributes.find(attr => attr.name === attribute.name);\n if (!baseAttribute) {\n log.warn(`shader layout attribute ${attribute.name} not present in shader`);\n }\n else {\n baseAttribute.type = attribute.type || baseAttribute.type;\n baseAttribute.stepMode = attribute.stepMode || baseAttribute.stepMode;\n }\n }\n return mergedLayout;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\nconst ERR_TYPE_DEDUCTION = 'Failed to deduce GL constant from typed array';\n/**\n * Converts TYPED ARRAYS to corresponding GL constant\n * Used to auto deduce gl parameter types\n * @deprecated Use getDataTypeFromTypedArray\n * @param arrayOrType\n * @returns\n */\nexport function getGLTypeFromTypedArray(arrayOrType) {\n // If typed array, look up constructor\n const type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n switch (type) {\n case Float32Array:\n return 5126;\n case Uint16Array:\n return 5123;\n case Uint32Array:\n return 5125;\n case Uint8Array:\n return 5121;\n case Uint8ClampedArray:\n return 5121;\n case Int8Array:\n return 5120;\n case Int16Array:\n return 5122;\n case Int32Array:\n return 5124;\n default:\n throw new Error(ERR_TYPE_DEDUCTION);\n }\n}\n/**\n * Converts GL constant to corresponding TYPED ARRAY\n * Used to auto deduce gl parameter types\n * @deprecated Use getTypedArrayFromDataType\n * @param glType\n * @param param1\n * @returns\n */\n// eslint-disable-next-line complexity\nexport function getTypedArrayFromGLType(glType, options) {\n const { clamped = true } = options || {};\n // Sorted in some order of likelihood to reduce amount of comparisons\n switch (glType) {\n case 5126:\n return Float32Array;\n case 5123:\n case 33635:\n case 32819:\n case 32820:\n return Uint16Array;\n case 5125:\n return Uint32Array;\n case 5121:\n return clamped ? Uint8ClampedArray : Uint8Array;\n case 5120:\n return Int8Array;\n case 5122:\n return Int16Array;\n case 5124:\n return Int32Array;\n default:\n throw new Error('Failed to deduce typed array type from GL constant');\n }\n}\n/**\n * Flip rows (can be used on arrays returned from `Framebuffer.readPixels`)\n * https: *stackoverflow.com/questions/41969562/\n * how-can-i-flip-the-result-of-webglrenderingcontext-readpixels\n * @param param0\n */\nexport function flipRows(options) {\n const { data, width, height, bytesPerPixel = 4, temp } = options;\n const bytesPerRow = width * bytesPerPixel;\n // make a temp buffer to hold one row\n const tempBuffer = temp || new Uint8Array(bytesPerRow);\n for (let y = 0; y < height / 2; ++y) {\n const topOffset = y * bytesPerRow;\n const bottomOffset = (height - y - 1) * bytesPerRow;\n // make copy of a row on the top half\n tempBuffer.set(data.subarray(topOffset, topOffset + bytesPerRow));\n // copy a row from the bottom half to the top\n data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);\n // copy the copy of the top half row to the bottom half\n data.set(tempBuffer, bottomOffset);\n }\n}\nexport function scalePixels(options) {\n const { data, width, height } = options;\n const newWidth = Math.round(width / 2);\n const newHeight = Math.round(height / 2);\n const newData = new Uint8Array(newWidth * newHeight * 4);\n for (let y = 0; y < newHeight; y++) {\n for (let x = 0; x < newWidth; x++) {\n for (let c = 0; c < 4; c++) {\n newData[(y * newWidth + x) * 4 + c] = data[(y * 2 * width + x * 2) * 4 + c];\n }\n }\n }\n return { data: newData, width: newWidth, height: newHeight };\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert, checkProps } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { getTypedArrayFromGLType } from \"./typed-array-utils.js\";\nconst DEFAULT_ACCESSOR_VALUES = {\n offset: 0,\n stride: 0,\n type: 5126,\n size: 1,\n divisor: 0,\n normalized: false,\n integer: false\n};\nconst PROP_CHECKS = {\n deprecatedProps: {\n instanced: 'divisor',\n isInstanced: 'divisor'\n }\n};\nexport class Accessor {\n offset;\n stride;\n type;\n size;\n divisor;\n normalized;\n integer;\n buffer;\n index;\n static getBytesPerElement(accessor) {\n // TODO: using `FLOAT` when type is not specified,\n // ensure this assumption is valid or force API to specify type.\n const ArrayType = getTypedArrayFromGLType(accessor.type || 5126);\n return ArrayType.BYTES_PER_ELEMENT;\n }\n static getBytesPerVertex(accessor) {\n assert(accessor.size);\n // TODO: using `FLOAT` when type is not specified,\n // ensure this assumption is valid or force API to specify type.\n const ArrayType = getTypedArrayFromGLType(accessor.type || 5126);\n return ArrayType.BYTES_PER_ELEMENT * accessor.size;\n }\n // Combines (merges) a list of accessors. On top of default values\n // Usually [programAccessor, bufferAccessor, appAccessor]\n // All props will be set in the returned object.\n // TODO check for conflicts between values in the supplied accessors\n static resolve(...accessors) {\n return new Accessor(...[DEFAULT_ACCESSOR_VALUES, ...accessors]); // Default values\n }\n constructor(...accessors) {\n accessors.forEach(accessor => this._assign(accessor)); // Merge in sequence\n Object.freeze(this);\n }\n toString() {\n return JSON.stringify(this);\n }\n // ACCESSORS\n // TODO - remove>\n get BYTES_PER_ELEMENT() {\n return Accessor.getBytesPerElement(this);\n }\n get BYTES_PER_VERTEX() {\n return Accessor.getBytesPerVertex(this);\n }\n // PRIVATE\n // eslint-disable-next-line complexity, max-statements\n _assign(props = {}) {\n props = checkProps('Accessor', props, PROP_CHECKS);\n if (props.type !== undefined) {\n this.type = props.type;\n // Auto-deduce integer type?\n if (props.type === 5124 || props.type === 5125) {\n this.integer = true;\n }\n }\n if (props.size !== undefined) {\n this.size = props.size;\n }\n if (props.offset !== undefined) {\n this.offset = props.offset;\n }\n if (props.stride !== undefined) {\n this.stride = props.stride;\n }\n // @ts-expect-error\n if (props.normalize !== undefined) {\n // @ts-expect-error\n this.normalized = props.normalize;\n }\n if (props.normalized !== undefined) {\n this.normalized = props.normalized;\n }\n if (props.integer !== undefined) {\n this.integer = props.integer;\n }\n // INSTANCE DIVISOR\n if (props.divisor !== undefined) {\n this.divisor = props.divisor;\n }\n // Buffer is optional\n if (props.buffer !== undefined) {\n this.buffer = props.buffer;\n }\n // The binding index (for binding e.g. Transform feedbacks and Uniform buffers)\n // TODO - should this be part of accessor?\n if (props.index !== undefined) {\n if (typeof props.index === 'boolean') {\n this.index = props.index ? 1 : 0;\n }\n else {\n this.index = props.index;\n }\n }\n // DEPRECATED\n // @ts-expect-error\n if (props.instanced !== undefined) {\n // @ts-expect-error\n this.divisor = props.instanced ? 1 : 0;\n }\n // @ts-expect-error\n if (props.isInstanced !== undefined) {\n // @ts-expect-error\n this.divisor = props.isInstanced ? 1 : 0;\n }\n if (this.offset === undefined)\n delete this.offset;\n if (this.stride === undefined)\n delete this.stride;\n if (this.type === undefined)\n delete this.type;\n if (this.size === undefined)\n delete this.size;\n if (this.divisor === undefined)\n delete this.divisor;\n if (this.normalized === undefined)\n delete this.normalized;\n if (this.integer === undefined)\n delete this.integer;\n if (this.buffer === undefined)\n delete this.buffer;\n if (this.index === undefined)\n delete this.index;\n return this;\n }\n}\n// TEST EXPORTS\nexport { DEFAULT_ACCESSOR_VALUES };\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from \"./log.js\";\nexport function checkProps(className, props, propChecks) {\n const { removedProps = {}, deprecatedProps = {}, replacedProps = {} } = propChecks;\n // removedProps: Removed props no longer supported\n // print error and link to upgrade guide\n for (const propName in removedProps) {\n if (propName in props) {\n const replacementProp = removedProps[propName];\n const replacement = replacementProp ? `${className}.${removedProps[propName]}` : 'N/A';\n log.removed(`${className}.${propName}`, replacement)();\n }\n }\n // deprecatedProps: Deprecated props that can not be autosubstituted\n // print warning and rely on caller to substitute\n for (const propName in deprecatedProps) {\n if (propName in props) {\n const replacementProp = deprecatedProps[propName];\n log.deprecated(`${className}.${propName}`, `${className}.${replacementProp}`)();\n }\n }\n // replacedProps: Deprecated props that can be autosubstituted\n // print warning and return updated props object\n let newProps = null;\n for (const [propName, replacementProp] of Object.entries(replacedProps)) {\n if (propName in props) {\n log.deprecated(`${className}.${propName}`, `${className}.${replacementProp}`)();\n newProps = newProps || Object.assign({}, props);\n newProps[replacementProp] = props[propName];\n delete newProps[propName];\n }\n }\n return newProps || props;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\n/** Check is uniform is of sampler type */\nexport function isSamplerUniform(type) {\n return SAMPLER_TYPES.includes(type);\n}\nconst SAMPLER_TYPES = [\n 35678,\n 35680,\n 35679,\n 35682,\n 36289,\n 36292,\n 36293,\n 36298,\n 36299,\n 36300,\n 36303,\n 36306,\n 36307,\n 36308,\n 36311\n];\n// Composite types table\nconst COMPOSITE_GL_TYPES = {\n [5126]: [5126, 1, 'float', 'f32', 'float32'],\n [35664]: [5126, 2, 'vec2', 'vec2', 'float32x2'],\n [35665]: [5126, 3, 'vec3', 'vec3', 'float32x3'],\n [35666]: [5126, 4, 'vec4', 'vec4', 'float32x4'],\n [5124]: [5124, 1, 'int', 'i32', 'sint32'],\n [35667]: [5124, 2, 'ivec2', 'vec2', 'sint32x2'],\n [35668]: [5124, 3, 'ivec3', 'vec3', 'sint32x3'],\n [35669]: [5124, 4, 'ivec4', 'vec4', 'sint32x4'],\n [5125]: [5125, 1, 'uint', 'u32', 'uint32'],\n [36294]: [5125, 2, 'uvec2', 'vec2', 'uint32x2'],\n [36295]: [5125, 3, 'uvec3', 'vec3', 'uint32x3'],\n [36296]: [5125, 4, 'uvec4', 'vec4', 'uint32x4'],\n [35670]: [5126, 1, 'bool', 'f32', 'float32'],\n [35671]: [5126, 2, 'bvec2', 'vec2', 'float32x2'],\n [35672]: [5126, 3, 'bvec3', 'vec3', 'float32x3'],\n [35673]: [5126, 4, 'bvec4', 'vec4', 'float32x4'],\n // TODO - are sizes/components below correct?\n [35674]: [5126, 8, 'mat2', 'mat2x2'], // 4\n [35685]: [5126, 8, 'mat2x3', 'mat2x3'], // 6\n [35686]: [5126, 8, 'mat2x4', 'mat2x4'], // 8\n [35687]: [5126, 12, 'mat3x2', 'mat3x2'], // 6\n [35675]: [5126, 12, 'mat3', 'mat3x3'], // 9\n [35688]: [5126, 12, 'mat3x4', 'mat3x4'], // 12\n [35689]: [5126, 16, 'mat4x2', 'mat4x2'], // 8\n [35690]: [5126, 16, 'mat4x3', 'mat4x3'], // 12\n [35676]: [5126, 16, 'mat4', 'mat4x4'] // 16\n};\n/** Decomposes a composite type (GL.VEC3) into a basic type (GL.FLOAT) and components (3) */\nexport function decodeGLUniformType(glUniformType) {\n const typeAndSize = COMPOSITE_GL_TYPES[glUniformType];\n if (!typeAndSize) {\n throw new Error('uniform');\n }\n const [glType, components, , format] = typeAndSize;\n return { format, components, glType };\n}\n/** Decomposes a composite type (GL.VEC3) into a basic type (GL.FLOAT) and components (3) */\nexport function decodeGLAttributeType(glAttributeType) {\n const typeAndSize = COMPOSITE_GL_TYPES[glAttributeType];\n if (!typeAndSize) {\n throw new Error('attribute');\n }\n const [, components, , shaderType, vertexFormat] = typeAndSize;\n // TODO sanity - if (shaderType.startsWith('mat' ...))\n const attributeType = shaderType;\n return { attributeType, vertexFormat, components }; // , glType};\n}\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLDataType(compositeGLDataType) {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLDataType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return { type, components };\n}\nexport function getCompositeGLDataType(type, components) {\n switch (type) {\n case 5120:\n case 5121:\n case 5122:\n case 5123:\n type = 5126;\n break;\n default:\n }\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return { glType: Number(glType), name };\n }\n }\n return null;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\nimport { Accessor } from \"../../classic/accessor.js\"; // TODO - should NOT depend on classic API\nimport { decodeGLUniformType, decodeGLAttributeType, isSamplerUniform } from \"./decode-webgl-types.js\";\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl, program) {\n const shaderLayout = {\n attributes: [],\n bindings: []\n };\n shaderLayout.attributes = readAttributeDeclarations(gl, program);\n // Uniform blocks\n const uniformBlocks = readUniformBlocks(gl, program);\n for (const uniformBlock of uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map(uniform => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n const uniforms = readUniformBindings(gl, program);\n let textureUnit = 0;\n for (const uniform of uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const { viewDimension, sampleType } = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n // Varyings\n const varyings = readVaryings(gl, program);\n // Note - samplers are always in unform bindings, even if uniform blocks are used\n if (varyings?.length) {\n shaderLayout.varyings = varyings;\n }\n return shaderLayout;\n}\n// HELPERS\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeDeclarations(gl, program) {\n const attributes = [];\n const count = gl.getProgramParameter(program, 35721);\n for (let index = 0; index < count; index++) {\n const activeInfo = gl.getActiveAttrib(program, index);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const { name, type: compositeType /* , size*/ } = activeInfo;\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0\n if (location >= 0) {\n const { attributeType } = decodeGLAttributeType(compositeType);\n // Whether an attribute is instanced is essentially fixed by the structure of the shader code,\n // so it is arguably a static property of the shader.\n // There is no hint in the shader declarations\n // Heuristic: Any attribute name containing the word \"instance\" will be assumed to be instanced\n const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';\n attributes.push({\n name,\n location,\n stepMode,\n type: attributeType\n // size - for arrays, size is the number of elements in the array\n });\n }\n }\n // Sort by declaration order\n attributes.sort((a, b) => a.location - b.location);\n return attributes;\n}\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl, program) {\n const varyings = [];\n const count = gl.getProgramParameter(program, 35971);\n for (let location = 0; location < count; location++) {\n const activeInfo = gl.getTransformFeedbackVarying(program, location);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const { name, type: compositeType, size } = activeInfo;\n const { glType, components } = decodeGLUniformType(compositeType);\n const accessor = new Accessor({ type: glType, size: size * components });\n const varying = { location, name, accessor }; // Base values\n varyings.push(varying);\n }\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl, program) {\n const uniforms = [];\n const uniformCount = gl.getProgramParameter(program, 35718);\n for (let i = 0; i < uniformCount; i++) {\n const activeInfo = gl.getActiveUniform(program, i);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const { name: rawName, size, type } = activeInfo;\n const { name, isArray } = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n webglLocation = gl.getUniformLocation(program, elementName);\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation\n };\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n/**\n * Extract info about all \"active\" uniform blocks\n * @note In WebGL, \"active\" just means that unused (inactive) blocks may have been optimized away during linking)\n */\nfunction readUniformBlocks(gl, program) {\n const getBlockParameter = (blockIndex, pname) => gl.getActiveUniformBlockParameter(program, blockIndex, pname);\n const uniformBlocks = [];\n const blockCount = gl.getProgramParameter(program, 35382);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo = {\n name: gl.getActiveUniformBlockName(program, blockIndex) || '',\n location: getBlockParameter(blockIndex, 35391),\n byteLength: getBlockParameter(blockIndex, 35392),\n vertex: getBlockParameter(blockIndex, 35396),\n fragment: getBlockParameter(blockIndex, 35398),\n uniformCount: getBlockParameter(blockIndex, 35394),\n uniforms: []\n };\n const uniformIndices = getBlockParameter(blockIndex, 35395) || [];\n const uniformType = gl.getActiveUniforms(program, uniformIndices, 35383); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl.getActiveUniforms(program, uniformIndices, 35384); // Array of GLuint indicating the sizes of the uniforms.\n // const uniformBlockIndex = gl.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_BLOCK_INDEX\n // ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl.getActiveUniforms(program, uniformIndices, 35387); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl.getActiveUniforms(program, uniformIndices, 35388); // Array of GLint indicating the strides between the elements.\n // const uniformMatrixStride = gl.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_MATRIX_STRIDE\n // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n // const uniformRowMajor = gl.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n const activeInfo = gl.getActiveUniform(program, uniformIndices[i]);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n blockInfo.uniforms.push({\n name: activeInfo.name,\n format: decodeGLUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i]\n // matrixStride: uniformStride[i],\n // rowMajor: uniformRowMajor[i]\n });\n }\n uniformBlocks.push(blockInfo);\n }\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n/**\n * TOOD - compare with a above, confirm copy, then delete\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n*/\nconst SAMPLER_UNIFORMS_GL_TO_GPU = {\n [35678]: ['2d', 'float'],\n [35680]: ['cube', 'float'],\n [35679]: ['3d', 'float'],\n [35682]: ['3d', 'depth'],\n [36289]: ['2d-array', 'float'],\n [36292]: ['2d-array', 'depth'],\n [36293]: ['cube', 'float'],\n [36298]: ['2d', 'sint'],\n [36299]: ['3d', 'sint'],\n [36300]: ['cube', 'sint'],\n [36303]: ['2d-array', 'uint'],\n [36306]: ['2d', 'uint'],\n [36307]: ['3d', 'uint'],\n [36308]: ['cube', 'uint'],\n [36311]: ['2d-array', 'uint']\n};\nfunction getSamplerInfo(type) {\n const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (!sampler) {\n throw new Error('sampler');\n }\n const [viewDimension, sampleType] = sampler;\n return { viewDimension, sampleType };\n}\n// HELPERS\nfunction parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = UNIFORM_NAME_REGEXP.exec(name);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\n/** Set a raw uniform (without type conversion and caching) */\n/* eslint-disable max-len */\nexport function setUniform(gl, location, type, value) {\n const gl2 = gl;\n // Prepare the value for WebGL setters\n let uniformValue = value;\n if (uniformValue === true) {\n uniformValue = 1;\n }\n if (uniformValue === false) {\n uniformValue = 0;\n }\n const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;\n // prettier-ignore\n switch (type) {\n case 35678:\n case 35680:\n case 35679:\n case 35682:\n case 36289:\n case 36292:\n case 36293:\n case 36298:\n case 36299:\n case 36300:\n case 36303:\n case 36306:\n case 36307:\n case 36308:\n case 36311:\n if (typeof value !== 'number') {\n throw new Error('samplers must be set to integers');\n }\n return gl.uniform1i(location, value);\n case 5126: return gl.uniform1fv(location, arrayValue);\n case 35664: return gl.uniform2fv(location, arrayValue);\n case 35665: return gl.uniform3fv(location, arrayValue);\n case 35666: return gl.uniform4fv(location, arrayValue);\n case 5124: return gl.uniform1iv(location, arrayValue);\n case 35667: return gl.uniform2iv(location, arrayValue);\n case 35668: return gl.uniform3iv(location, arrayValue);\n case 35669: return gl.uniform4iv(location, arrayValue);\n case 35670: return gl.uniform1iv(location, arrayValue);\n case 35671: return gl.uniform2iv(location, arrayValue);\n case 35672: return gl.uniform3iv(location, arrayValue);\n case 35673: return gl.uniform4iv(location, arrayValue);\n // WEBGL2 - unsigned integers\n case 5125: return gl2.uniform1uiv(location, arrayValue, 1);\n case 36294: return gl2.uniform2uiv(location, arrayValue, 2);\n case 36295: return gl2.uniform3uiv(location, arrayValue, 3);\n case 36296: return gl2.uniform4uiv(location, arrayValue, 4);\n // WebGL2 - quadratic matrices\n // false: don't transpose the matrix\n case 35674: return gl.uniformMatrix2fv(location, false, arrayValue);\n case 35675: return gl.uniformMatrix3fv(location, false, arrayValue);\n case 35676: return gl.uniformMatrix4fv(location, false, arrayValue);\n // WebGL2 - rectangular matrices\n case 35685: return gl2.uniformMatrix2x3fv(location, false, arrayValue);\n case 35686: return gl2.uniformMatrix2x4fv(location, false, arrayValue);\n case 35687: return gl2.uniformMatrix3x2fv(location, false, arrayValue);\n case 35688: return gl2.uniformMatrix3x4fv(location, false, arrayValue);\n case 35689: return gl2.uniformMatrix4x2fv(location, false, arrayValue);\n case 35690: return gl2.uniformMatrix4x3fv(location, false, arrayValue);\n }\n throw new Error('Illegal uniform');\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPipeline, cast, splitUniformsAndBindings, log } from '@luma.gl/core';\nimport { mergeShaderLayout } from '@luma.gl/core';\n// import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { getShaderLayout } from \"../helpers/get-shader-layout.js\";\nimport { withDeviceAndGLParameters } from \"../converters/device-parameters.js\";\nimport { setUniform } from \"../helpers/set-uniform.js\";\nimport { WEBGLBuffer } from \"./webgl-buffer.js\";\nimport { WEBGLFramebuffer } from \"./webgl-framebuffer.js\";\nimport { WEBGLTexture } from \"./webgl-texture.js\";\nimport { WEBGLTextureView } from \"./webgl-texture-view.js\";\nimport { getGLDrawMode } from \"../helpers/webgl-topology-utils.js\";\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n /** The WebGL device that created this render pipeline */\n device;\n /** Handle to underlying WebGL program */\n handle;\n /** vertex shader */\n vs;\n /** fragment shader */\n fs;\n /** The layout extracted from shader by WebGL introspection APIs */\n introspectedLayout;\n /** Uniforms set on this model */\n uniforms = {};\n /** Bindings set on this model */\n bindings = {};\n /** WebGL varyings */\n varyings = null;\n _uniformCount = 0;\n _uniformSetters = {}; // TODO are these used?\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, { id: this.props.id });\n // Create shaders if needed\n this.vs = cast(props.vs);\n this.fs = cast(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const { varyings, bufferMode = 35981 } = props;\n if (varyings && varyings.length > 0) {\n this.varyings = varyings;\n this.device.gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n this._linkShaders();\n log.time(1, `RenderPipeline ${this.id} - shaderLayout introspection`)();\n this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);\n log.timeEnd(1, `RenderPipeline ${this.id} - shaderLayout introspection`)();\n // Merge provided layout with introspected layout\n this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);\n // WebGPU has more restrictive topology support than WebGL\n switch (this.props.topology) {\n case 'triangle-fan-webgl':\n case 'line-loop-webgl':\n log.warn(`Primitive topology ${this.props.topology} is deprecated and will be removed in v9.1`);\n break;\n default:\n }\n }\n destroy() {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n /**\n * Bindings include: textures, samplers and uniform buffers\n * @todo needed for portable model\n */\n setBindings(bindings, options) {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n for (const [name, value] of Object.entries(bindings)) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n // This convention allows shaders to name uniform blocks as `uniform appUniforms {} app;`\n // and reference them as `app` from both GLSL and JS.\n // TODO - this is rather hacky - we could also remap the name directly in the shader layout.\n const binding = this.shaderLayout.bindings.find(binding => binding.name === name) ||\n this.shaderLayout.bindings.find(binding => binding.name === `${name}Uniforms`);\n if (!binding) {\n const validBindings = this.shaderLayout.bindings\n .map(binding => `\"${binding.name}\"`)\n .join(', ');\n if (!options?.disableWarnings) {\n log.warn(`Unknown binding \"${name}\" in render pipeline \"${this.id}\", expected one of ${validBindings}`)();\n }\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding \"${name}\" in render pipeline \"${this.id}\"`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTextureView ||\n value instanceof WEBGLTexture ||\n value instanceof WEBGLFramebuffer)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n this.bindings[name] = value;\n }\n }\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options) {\n const { renderPass, parameters = this.props.parameters, topology = this.props.topology, vertexArray, vertexCount, \n // indexCount,\n instanceCount, isInstanced = false, firstVertex = 0, \n // firstIndex,\n // firstInstance,\n // baseVertex,\n transformFeedback } = options;\n const glDrawMode = getGLDrawMode(topology);\n const isIndexed = Boolean(vertexArray.indexBuffer);\n const glIndexType = vertexArray.indexBuffer?.glIndexType;\n // Note that we sometimes get called with 0 instances\n // If we are using async linking, we need to wait until linking completes\n if (this.linkStatus !== 'success') {\n log.info(2, `RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)();\n return false;\n }\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || vertexCount === 0) {\n log.info(2, `RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)();\n return false;\n }\n // (isInstanced && instanceCount === 0)\n if (vertexCount === 0) {\n log.info(2, `RenderPipeline:${this.id}.draw() aborted - no vertices to draw`)();\n return true;\n }\n this.device.gl.useProgram(this.handle);\n // Note: Rebinds constant attributes before each draw call\n vertexArray.bindBeforeRender(renderPass);\n if (transformFeedback) {\n transformFeedback.begin(this.props.topology);\n }\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n const webglRenderPass = renderPass;\n withDeviceAndGLParameters(this.device, parameters, webglRenderPass.glParameters, () => {\n if (isIndexed && isInstanced) {\n this.device.gl.drawElementsInstanced(glDrawMode, vertexCount || 0, // indexCount?\n glIndexType, firstVertex, instanceCount || 0);\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gldrawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);\n }\n else if (isIndexed) {\n this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?\n }\n else if (isInstanced) {\n this.device.gl.drawArraysInstanced(glDrawMode, firstVertex, vertexCount || 0, instanceCount || 0);\n }\n else {\n this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);\n }\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n vertexArray.unbindAfterRender(renderPass);\n return true;\n }\n // DEPRECATED METHODS\n setUniformsWebGL(uniforms) {\n const { bindings } = splitUniformsAndBindings(uniforms);\n Object.keys(bindings).forEach(name => {\n log.warn(`Unsupported value \"${JSON.stringify(bindings[name])}\" used in setUniforms() for key ${name}. Use setBindings() instead?`)();\n });\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n // PRIVATE METHODS\n // setAttributes(attributes: Record): void {}\n // setBindings(bindings: Record): void {}\n async _linkShaders() {\n const { gl } = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n // TODO Avoid checking program linking error in production\n if (log.level === 0) {\n // return;\n }\n if (!this.device.features.has('compilation-status-async-webgl')) {\n const status = this._getLinkStatus();\n this._reportLinkStatus(status);\n return;\n }\n // async case\n log.once(1, 'RenderPipeline linking is asynchronous')();\n await this._waitForLinkComplete();\n log.info(2, `RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();\n const status = this._getLinkStatus();\n this._reportLinkStatus(status);\n }\n /** Report link status. First, check for shader compilation failures if linking fails */\n _reportLinkStatus(status) {\n switch (status) {\n case 'success':\n return;\n default:\n // First check for shader compilation failures if linking fails\n if (this.vs.compilationStatus === 'error') {\n this.vs.debugShader();\n throw new Error(`Error during compilation of shader ${this.vs.id}`);\n }\n if (this.fs?.compilationStatus === 'error') {\n this.fs.debugShader();\n throw new Error(`Error during compilation of shader ${this.fs.id}`);\n }\n throw new Error(`Error during ${status}: ${this.device.gl.getProgramInfoLog(this.handle)}`);\n }\n }\n /**\n * Get the shader compilation status\n * TODO - Load log even when no error reported, to catch warnings?\n * https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n */\n _getLinkStatus() {\n const { gl } = this.device;\n const linked = gl.getProgramParameter(this.handle, 35714);\n if (!linked) {\n this.linkStatus = 'error';\n return 'linking';\n }\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, 35715);\n if (!validated) {\n this.linkStatus = 'error';\n return 'validation';\n }\n this.linkStatus = 'success';\n return 'success';\n }\n /** Use KHR_parallel_shader_compile extension if available */\n async _waitForLinkComplete() {\n const waitMs = async (ms) => await new Promise(resolve => setTimeout(resolve, ms));\n const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)\n // If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking\n if (!this.device.features.has('compilation-status-async-webgl')) {\n await waitMs(DELAY_MS);\n return;\n }\n const { gl } = this.device;\n for (;;) {\n const complete = gl.getProgramParameter(this.handle, 37297);\n if (complete) {\n return;\n }\n await waitMs(DELAY_MS);\n }\n }\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n for (const [, texture] of Object.entries(this.bindings)) {\n if (texture instanceof WEBGLTexture) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n return texturesRenderable;\n }\n /** Apply any bindings (before each draw call) */\n _applyBindings() {\n // If we are using async linking, we need to wait until linking completes\n if (this.linkStatus !== 'success') {\n return;\n }\n const { gl } = this.device;\n gl.useProgram(this.handle);\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.shaderLayout.bindings) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n const value = this.bindings[binding.name] || this.bindings[binding.name.replace(/Uniforms$/, '')];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const { name } = binding;\n const location = gl.getUniformBlockIndex(this.handle, name);\n if (location === 4294967295) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl.bindBufferBase(35345, uniformBufferIndex, value.handle);\n }\n else {\n gl.bindBufferRange(35345, uniformBufferIndex, \n // @ts-expect-error\n value.buffer.handle, \n // @ts-expect-error\n value.offset || 0, \n // @ts-expect-error\n value.size || value.buffer.byteLength - value.offset);\n }\n uniformBufferIndex += 1;\n break;\n case 'texture':\n if (!(value instanceof WEBGLTextureView ||\n value instanceof WEBGLTexture ||\n value instanceof WEBGLFramebuffer)) {\n throw new Error('texture');\n }\n let texture;\n if (value instanceof WEBGLTextureView) {\n texture = value.texture;\n }\n else if (value instanceof WEBGLTexture) {\n texture = value;\n }\n else if (value instanceof WEBGLFramebuffer &&\n value.colorAttachments[0] instanceof WEBGLTextureView) {\n log.warn('Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead')();\n texture = value.colorAttachments[0].texture;\n }\n else {\n throw new Error('No texture');\n }\n gl.activeTexture(33984 + textureUnit);\n gl.bindTexture(texture.target, texture.handle);\n // gl.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n case 'sampler':\n // ignore\n break;\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n /**\n * Due to program sharing, uniforms need to be reset before every draw call\n * (though caching will avoid redundant WebGL calls)\n */\n _applyUniforms() {\n for (const uniformLayout of this.shaderLayout.uniforms || []) {\n const { name, location, type, textureUnit } = uniformLayout;\n const value = this.uniforms[name] ?? textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL } from '@luma.gl/constants';\n// Counts the number of complete primitives given a number of vertices and a drawMode\nexport function getPrimitiveDrawMode(drawMode) {\n switch (drawMode) {\n case 0:\n return 0;\n case 1:\n return 1;\n case 3:\n return 1;\n case 2:\n return 1;\n case 4:\n return 4;\n case 5:\n return 4;\n case 6:\n return 4;\n default:\n throw new Error('drawMode');\n }\n}\n// Counts the number of complete \"primitives\" given a number of vertices and a drawMode\nexport function getPrimitiveCount(options) {\n const { drawMode, vertexCount } = options;\n switch (drawMode) {\n case 0:\n case 2:\n return vertexCount;\n case 1:\n return vertexCount / 2;\n case 3:\n return vertexCount - 1;\n case 4:\n return vertexCount / 3;\n case 5:\n case 6:\n return vertexCount - 2;\n default:\n throw new Error('drawMode');\n }\n}\n// Counts the number of vertices after splitting the vertex stream into separate \"primitives\"\nexport function getVertexCount(options) {\n const { drawMode, vertexCount } = options;\n const primitiveCount = getPrimitiveCount({ drawMode, vertexCount });\n switch (getPrimitiveDrawMode(drawMode)) {\n case 0:\n return primitiveCount;\n case 1:\n return primitiveCount * 2;\n case 4:\n return primitiveCount * 3;\n default:\n throw new Error('drawMode');\n }\n}\n/** Get the primitive type for draw */\nexport function getGLDrawMode(topology) {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return 0;\n case 'line-list': return 1;\n case 'line-strip': return 3;\n case 'line-loop-webgl': return 2;\n case 'triangle-list': return 4;\n case 'triangle-strip': return 5;\n case 'triangle-fan-webgl': return 6;\n default: throw new Error(topology);\n }\n}\n/** Get the primitive type for transform feedback */\nexport function getGLPrimitive(topology) {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return 0;\n case 'line-list': return 1;\n case 'line-strip': return 1;\n case 'line-loop-webgl': return 1;\n case 'triangle-list': return 4;\n case 'triangle-strip': return 4;\n case 'triangle-fan-webgl': return 4;\n default: throw new Error(topology);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/**\n * Encodes commands to queue that can be executed later\n */\nexport class CommandEncoder extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n measureExecutionTime: undefined\n };\n get [Symbol.toStringTag]() {\n return 'CommandEncoder';\n }\n constructor(device, props) {\n super(device, props, CommandEncoder.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/**\n * Encodes commands to queue that can be executed later\n */\nexport class CommandBuffer extends Resource {\n static defaultProps = {\n ...Resource.defaultProps\n };\n get [Symbol.toStringTag]() {\n return 'CommandBuffer';\n }\n constructor(device, props) {\n super(device, props, CommandBuffer.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CommandBuffer, Texture } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { WEBGLTexture } from \"./webgl-texture.js\";\nimport { getWebGLTextureParameters } from \"../converters/texture-formats.js\";\nfunction cast(value) {\n return value;\n}\nexport class WEBGLCommandBuffer extends CommandBuffer {\n device;\n commands = [];\n constructor(device) {\n super(device, {});\n this.device = device;\n }\n submitCommands(commands = this.commands) {\n for (const command of commands) {\n switch (command.name) {\n case 'copy-buffer-to-buffer':\n _copyBufferToBuffer(this.device, command.options);\n break;\n case 'copy-buffer-to-texture':\n _copyBufferToTexture(this.device, command.options);\n break;\n case 'copy-texture-to-buffer':\n _copyTextureToBuffer(this.device, command.options);\n break;\n case 'copy-texture-to-texture':\n _copyTextureToTexture(this.device, command.options);\n break;\n }\n }\n }\n}\nfunction _copyBufferToBuffer(device, options) {\n const source = cast(options.source);\n const destination = cast(options.destination);\n // {In WebGL2 we can p}erform the copy on the GPU\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n device.gl.bindBuffer(36662, source.handle);\n device.gl.bindBuffer(36663, destination.handle);\n device.gl.copyBufferSubData(36662, 36663, options.sourceOffset ?? 0, options.destinationOffset ?? 0, options.size);\n device.gl.bindBuffer(36662, null);\n device.gl.bindBuffer(36663, null);\n}\n/**\n * Copies data from a Buffer object into a Texture object\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyBufferToTexture(device, options) {\n throw new Error('Not implemented');\n}\n/**\n * Copies data from a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyTextureToBuffer(device, options) {\n const { \n /** Texture to copy to/from. */\n source, \n /** Mip-map level of the texture to copy to/from. (Default 0) */\n mipLevel = 0, \n /** Defines which aspects of the texture to copy to/from. */\n aspect = 'all', \n /** Width to copy */\n width = options.source.width, \n /** Height to copy */\n height = options.source.height, depthOrArrayLayers = 0, \n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n origin = [0, 0], \n /** Destination buffer */\n destination, \n /** Offset, in bytes, from the beginning of the buffer to the start of the image data (default 0) */\n byteOffset = 0, \n /**\n * The stride, in bytes, between the beginning of each block row and the subsequent block row.\n * Required if there are multiple block rows (i.e. the copy height or depth is more than one block).\n */\n bytesPerRow, \n /**\n * Number of block rows per single image of the texture.\n * rowsPerImage × bytesPerRow is the stride, in bytes, between the beginning of each image of data and the subsequent image.\n * Required if there are multiple images (i.e. the copy depth is more than one).\n */\n rowsPerImage } = options;\n // TODO - Not possible to read just stencil or depth part in WebGL?\n if (aspect !== 'all') {\n throw new Error('not supported');\n }\n // TODO - mipLevels are set when attaching texture to framebuffer\n if (mipLevel !== 0 || depthOrArrayLayers !== 0 || bytesPerRow || rowsPerImage) {\n throw new Error('not implemented');\n }\n // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature\n const { framebuffer, destroyFramebuffer } = getFramebuffer(source);\n let prevHandle;\n try {\n const webglBuffer = destination;\n const sourceWidth = width || framebuffer.width;\n const sourceHeight = height || framebuffer.height;\n const sourceParams = getWebGLTextureParameters(framebuffer.texture.props.format);\n const sourceFormat = sourceParams.dataFormat;\n const sourceType = sourceParams.type;\n // if (!target) {\n // // Create new buffer with enough size\n // const components = glFormatToComponents(sourceFormat);\n // const byteCount = glTypeToBytes(sourceType);\n // const byteLength = byteOffset + sourceWidth * sourceHeight * components * byteCount;\n // target = device.createBuffer({byteLength});\n // }\n device.gl.bindBuffer(35051, webglBuffer.handle);\n // @ts-expect-error native bindFramebuffer is overridden by our state tracker\n prevHandle = device.gl.bindFramebuffer(36160, framebuffer.handle);\n device.gl.readPixels(origin[0], origin[1], sourceWidth, sourceHeight, sourceFormat, sourceType, byteOffset);\n }\n finally {\n device.gl.bindBuffer(35051, null);\n // prevHandle may be unassigned if the try block failed before binding\n if (prevHandle !== undefined) {\n device.gl.bindFramebuffer(36160, prevHandle);\n }\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n }\n}\n/**\n * Copies data from a Framebuffer or a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transfer.\nexport function readPixelsToBuffer(\n source: Framebuffer | Texture,\n options?: {\n sourceX?: number;\n sourceY?: number;\n sourceFormat?: number;\n target?: Buffer; // A new Buffer object is created when not provided.\n targetByteOffset?: number; // byte offset in buffer object\n // following parameters are auto deduced if not provided\n sourceWidth?: number;\n sourceHeight?: number;\n sourceType?: number;\n }\n): Buffer\n */\n/**\n * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)\n */\n// eslint-disable-next-line complexity, max-statements\nfunction _copyTextureToTexture(device, options) {\n const { \n /** Texture to copy to/from. */\n source, \n /** Mip-map level of the texture to copy to (Default 0) */\n destinationMipLevel = 0, \n /** Defines which aspects of the texture to copy to/from. */\n // aspect = 'all',\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy from. */\n origin = [0, 0], \n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to. */\n destinationOrigin = [0, 0], \n /** Texture to copy to/from. */\n destination\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n // destinationMipLevel = options.mipLevel,\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n // destinationOrigin = [0, 0],\n /** Defines which aspects of the texture to copy to/from. */\n // destinationAspect = options.aspect,\n } = options;\n let { width = options.destination.width, height = options.destination.height\n // depthOrArrayLayers = 0\n } = options;\n const { framebuffer, destroyFramebuffer } = getFramebuffer(source);\n const [sourceX, sourceY] = origin;\n const [destinationX, destinationY, destinationZ] = destinationOrigin;\n // @ts-expect-error native bindFramebuffer is overridden by our state tracker\n const prevHandle = device.gl.bindFramebuffer(36160, framebuffer.handle);\n // TODO - support gl.readBuffer (WebGL2 only)\n // const prevBuffer = gl.readBuffer(attachment);\n let texture = null;\n let textureTarget;\n if (destination instanceof WEBGLTexture) {\n texture = destination;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n textureTarget = texture.target;\n }\n else {\n throw new Error('invalid destination');\n }\n switch (textureTarget) {\n case 3553:\n case 34067:\n device.gl.copyTexSubImage2D(textureTarget, destinationMipLevel, destinationX, destinationY, sourceX, sourceY, width, height);\n break;\n case 35866:\n case 32879:\n device.gl.copyTexSubImage3D(textureTarget, destinationMipLevel, destinationX, destinationY, destinationZ, sourceX, sourceY, width, height);\n break;\n default:\n }\n if (texture) {\n texture.unbind();\n }\n device.gl.bindFramebuffer(36160, prevHandle);\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n}\n// Returns number of components in a specific readPixels WebGL format\nexport function glFormatToComponents(format) {\n switch (format) {\n case 6406:\n case 33326:\n case 6403:\n return 1;\n case 33328:\n case 33319:\n return 2;\n case 6407:\n case 34837:\n return 3;\n case 6408:\n case 34836:\n return 4;\n // TODO: Add support for additional WebGL2 formats\n default:\n throw new Error('GLFormat');\n }\n}\n// Return byte count for given readPixels WebGL type\nexport function glTypeToBytes(type) {\n switch (type) {\n case 5121:\n return 1;\n case 33635:\n case 32819:\n case 32820:\n return 2;\n case 5126:\n return 4;\n // TODO: Add support for additional WebGL2 types\n default:\n throw new Error('GLType');\n }\n}\n// Helper methods\nfunction getFramebuffer(source) {\n if (source instanceof Texture) {\n const { width, height, id } = source;\n const framebuffer = source.device.createFramebuffer({\n id: `framebuffer-for-${id}`,\n width,\n height,\n colorAttachments: [source]\n });\n return { framebuffer, destroyFramebuffer: true };\n }\n return { framebuffer: source, destroyFramebuffer: false };\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CommandEncoder } from '@luma.gl/core';\nimport { WEBGLCommandBuffer } from \"./webgl-command-buffer.js\";\nexport class WEBGLCommandEncoder extends CommandEncoder {\n device;\n commandBuffer;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.commandBuffer = new WEBGLCommandBuffer(device);\n }\n destroy() { }\n finish() {\n this.commandBuffer.submitCommands();\n }\n // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;\n // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;\n // finish(options?: {id?: string}): GPUCommandBuffer;\n copyBufferToBuffer(options) {\n this.commandBuffer.commands.push({ name: 'copy-buffer-to-buffer', options });\n }\n copyBufferToTexture(options) {\n this.commandBuffer.commands.push({ name: 'copy-buffer-to-texture', options });\n }\n copyTextureToBuffer(options) {\n this.commandBuffer.commands.push({ name: 'copy-texture-to-buffer', options });\n }\n copyTextureToTexture(options) {\n this.commandBuffer.commands.push({ name: 'copy-texture-to-texture', options });\n }\n pushDebugGroup(groupLabel) { }\n popDebugGroup() { }\n insertDebugMarker(markerLabel) { }\n resolveQuerySet(querySet, destination, options) { }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getAttributeInfosByLocation } from \"../attribute-utils/get-attribute-from-layouts.js\";\nimport { Resource } from \"./resource.js\";\n/**\n * Stores attribute bindings.\n * Makes it easy to share a render pipeline and use separate vertex arrays.\n * @note On WebGL, VertexArray allows non-constant bindings to be performed in advance\n * reducing the number of WebGL calls per draw call.\n * @note On WebGPU this is just a convenience class that collects the bindings.\n */\nexport class VertexArray extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n renderPipeline: null\n };\n get [Symbol.toStringTag]() {\n return 'VertexArray';\n }\n /** Max number of vertex attributes */\n maxVertexAttributes;\n /** Attribute infos indexed by location - TODO only needed by webgl module? */\n attributeInfos;\n /** Index buffer */\n indexBuffer = null;\n /** Attributes indexed by buffer slot */\n attributes;\n constructor(device, props) {\n super(device, props, VertexArray.defaultProps);\n this.maxVertexAttributes = device.limits.maxVertexAttributes;\n this.attributes = new Array(this.maxVertexAttributes).fill(null);\n this.attributeInfos = getAttributeInfosByLocation(props.renderPipeline.shaderLayout, props.renderPipeline.bufferLayout, this.maxVertexAttributes);\n }\n // DEPRECATED METHODS\n /** @deprecated Set constant attributes (WebGL only) */\n setConstantWebGL(location, value) {\n throw new Error('constant attributes not supported');\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nlet arrayBuffer;\nexport function getScratchArrayBuffer(byteLength) {\n if (!arrayBuffer || arrayBuffer.byteLength < byteLength) {\n arrayBuffer = new ArrayBuffer(byteLength);\n }\n return arrayBuffer;\n}\nexport function getScratchArray(Type, length) {\n const scratchArrayBuffer = getScratchArrayBuffer(Type.BYTES_PER_ELEMENT * length);\n return new Type(scratchArrayBuffer, 0, length); // arrayBuffer, byteOffset, length (in elements)\n}\n// Uses copyWithin to significantly speed up typed array value filling\nexport function fillArray(options) {\n const { target, source, start = 0, count = 1 } = options;\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n }\n else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n return options.target;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VertexArray, getScratchArray, fillArray } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { getBrowser } from '@probe.gl/env';\nimport { getGLFromVertexType } from \"../converters/vertex-formats.js\";\n// import {getGLFromVertexType} from '../converters/vertex-formats';\n/** VertexArrayObject wrapper */\nexport class WEBGLVertexArray extends VertexArray {\n get [Symbol.toStringTag]() {\n return 'VertexArray';\n }\n device;\n handle;\n /** Attribute 0 buffer constant */\n buffer = null;\n bufferValue = null;\n /** * Attribute 0 can not be disable on most desktop OpenGL based browsers */\n static isConstantAttributeZeroSupported(device) {\n return getBrowser() === 'Chrome';\n }\n // Create a VertexArray\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.handle = this.device.gl.createVertexArray();\n }\n destroy() {\n super.destroy();\n if (this.buffer) {\n this.buffer?.destroy();\n }\n if (this.handle) {\n this.device.gl.deleteVertexArray(this.handle);\n // @ts-expect-error read-only/undefined\n this.handle = undefined;\n }\n // Auto-delete elements?\n // return [this.elements];\n }\n /**\n // Set (bind/unbind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER or null. Constants not supported\n *\n * @param elementBuffer\n */\n setIndexBuffer(indexBuffer) {\n const buffer = indexBuffer;\n // Explicitly allow `null` to support clearing the index buffer\n if (buffer && buffer.glTarget !== 34963) {\n throw new Error('Use .setBuffer()');\n }\n // In WebGL The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject\n this.device.gl.bindVertexArray(this.handle);\n this.device.gl.bindBuffer(34963, buffer ? buffer.handle : null);\n this.indexBuffer = buffer;\n // Unbind to prevent unintended changes to the VAO.\n this.device.gl.bindVertexArray(null);\n }\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, attributeBuffer) {\n const buffer = attributeBuffer;\n // Sanity check target\n if (buffer.glTarget === 34963) {\n throw new Error('Use .setIndexBuffer()');\n }\n const { size, type, stride, offset, normalized, integer, divisor } = this._getAccessor(location);\n this.device.gl.bindVertexArray(this.handle);\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n this.device.gl.bindBuffer(34962, buffer.handle);\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);\n }\n else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n // Clear binding - keeping it may cause [.WebGL-0x12804417100]\n // GL_INVALID_OPERATION: A transform feedback buffer that would be written to is also bound to a non-transform-feedback target\n this.device.gl.bindBuffer(34962, null);\n // Mark as non-constant\n this.device.gl.enableVertexAttribArray(location);\n // Set the step mode 0=vertex, 1=instance\n this.device.gl.vertexAttribDivisor(location, divisor || 0);\n this.attributes[location] = buffer;\n // Unbind to prevent unintended changes to the VAO.\n this.device.gl.bindVertexArray(null);\n }\n /** Set a location in vertex attributes array to a constant value, disables the location */\n setConstantWebGL(location, value) {\n this._enable(location, false);\n this.attributes[location] = value;\n }\n bindBeforeRender() {\n this.device.gl.bindVertexArray(this.handle);\n this._applyConstantAttributes();\n }\n unbindAfterRender() {\n // Unbind to prevent unintended changes to the VAO.\n this.device.gl.bindVertexArray(null);\n }\n // Internal methods\n /**\n * Constant attributes need to be reset before every draw call\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @note Constant attributes are only supported in WebGL, not in WebGPU\n */\n _applyConstantAttributes() {\n for (let location = 0; location < this.maxVertexAttributes; ++location) {\n const constant = this.attributes[location];\n // A typed array means this is a constant\n if (ArrayBuffer.isView(constant)) {\n this.device.setConstantAttributeWebGL(location, constant);\n }\n }\n }\n /**\n * Set a location in vertex attributes array to a buffer, enables the location, sets divisor\n * @note requires vertex array to be bound\n */\n // protected _setAttributeLayout(location: number): void {\n // const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);\n // // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n // if (integer) {\n // this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);\n // } else {\n // // Attaches ARRAY_BUFFER with specified buffer format to location\n // this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n // }\n // this.device.gl.vertexAttribDivisor(location, divisor || 0);\n // }\n /** Get an accessor from the */\n _getAccessor(location) {\n const attributeInfo = this.attributeInfos[location];\n if (!attributeInfo) {\n throw new Error(`Unknown attribute location ${location}`);\n }\n const glType = getGLFromVertexType(attributeInfo.bufferDataType);\n return {\n size: attributeInfo.bufferComponents,\n type: glType,\n stride: attributeInfo.byteStride,\n offset: attributeInfo.byteOffset,\n normalized: attributeInfo.normalized,\n // it is the shader attribute declaration, not the vertex memory format,\n // that determines if the data in the buffer will be treated as integers.\n //\n // Also note that WebGL supports assigning non-normalized integer data to floating point attributes,\n // but as far as we can tell, WebGPU does not.\n integer: attributeInfo.integer,\n divisor: attributeInfo.stepMode === 'instance' ? 1 : 0\n };\n }\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */\n _enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...\n const canDisableAttributeZero = WEBGLVertexArray.isConstantAttributeZeroSupported(this.device);\n const canDisableAttribute = canDisableAttributeZero || location !== 0;\n if (enable || canDisableAttribute) {\n location = Number(location);\n this.device.gl.bindVertexArray(this.handle);\n if (enable) {\n this.device.gl.enableVertexAttribArray(location);\n }\n else {\n this.device.gl.disableVertexAttribArray(location);\n }\n this.device.gl.bindVertexArray(null);\n }\n }\n /**\n * Provide a means to create a buffer that is equivalent to a constant.\n * NOTE: Desktop OpenGL cannot disable attribute 0.\n * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n * this-has-significant-performance-penalty\n */\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n const constantValue = normalizeConstantArrayValue(value);\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n if (this.buffer && byteLength !== this.buffer.byteLength) {\n throw new Error(`Buffer size is immutable, byte length ${byteLength} !== ${this.buffer.byteLength}.`);\n }\n let updateNeeded = !this.buffer;\n this.buffer = this.buffer || this.device.createBuffer({ byteLength });\n // Reallocate and update contents if needed\n updateNeeded = updateNeeded || !compareConstantArrayValues(constantValue, this.bufferValue);\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({ target: typedArray, source: constantValue, start: 0, count: length });\n this.buffer.write(typedArray);\n this.bufferValue = value;\n }\n return this.buffer;\n }\n}\n// HELPER FUNCTIONS\n/**\n * TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n * TODO - handle single values for size 1 attributes?\n */\nfunction normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n}\n/**\n *\n */\nfunction compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n// This function is needed in initialization stages,\n// make sure it can be imported in isolation\nimport { isBrowser } from \"./is-browser.js\";\nimport { isElectron } from \"./is-electron.js\";\nimport { navigator } from \"./globals.js\";\nexport function isMobile() {\n return typeof globalThis.orientation !== 'undefined';\n}\n// Simple browser detection\n// `mockUserAgent` parameter allows user agent to be overridden for testing\n/* eslint-disable complexity */\nexport function getBrowser(mockUserAgent) {\n if (!mockUserAgent && !isBrowser()) {\n return 'Node';\n }\n if (isElectron(mockUserAgent)) {\n return 'Electron';\n }\n const userAgent = mockUserAgent || navigator.userAgent || '';\n // NOTE: Order of tests matter, as many agents list Chrome etc.\n if (userAgent.indexOf('Edge') > -1) {\n return 'Edge';\n }\n if (globalThis.chrome) {\n return 'Chrome';\n }\n if (globalThis.safari) {\n return 'Safari';\n }\n if (globalThis.mozInnerScreenX) {\n return 'Firefox';\n }\n return 'Unknown';\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/** Holds a set of output buffers for pipeline (WebGL only) */\nexport class TransformFeedback extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n layout: undefined,\n buffers: {}\n };\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n constructor(device, props) {\n super(device, props, TransformFeedback.defaultProps);\n }\n}\n","import { log, TransformFeedback } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { WEBGLBuffer } from \"../../index.js\";\nimport { getGLPrimitive } from \"../helpers/webgl-topology-utils.js\";\nexport class WEBGLTransformFeedback extends TransformFeedback {\n device;\n gl;\n handle;\n /**\n * NOTE: The Model already has this information while drawing, but\n * TransformFeedback currently needs it internally, to look up\n * varying information outside of a draw() call.\n */\n layout;\n buffers = {};\n unusedBuffers = {};\n /**\n * Allows us to avoid a Chrome bug where a buffer that is already bound to a\n * different target cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n * This a major workaround, see: https://github.com/KhronosGroup/WebGL/issues/2346\n */\n bindOnUse = true;\n _bound = false;\n constructor(device, props) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle || this.gl.createTransformFeedback();\n this.layout = this.props.layout;\n if (props.buffers) {\n this.setBuffers(props.buffers);\n }\n Object.seal(this);\n }\n destroy() {\n this.gl.deleteTransformFeedback(this.handle);\n super.destroy();\n }\n begin(topology = 'point-list') {\n this.gl.bindTransformFeedback(36386, this.handle);\n if (this.bindOnUse) {\n this._bindBuffers();\n }\n this.gl.beginTransformFeedback(getGLPrimitive(topology));\n }\n end() {\n this.gl.endTransformFeedback();\n if (this.bindOnUse) {\n this._unbindBuffers();\n }\n this.gl.bindTransformFeedback(36386, null);\n }\n // SUBCLASS\n setBuffers(buffers) {\n this.buffers = {};\n this.unusedBuffers = {};\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n }\n setBuffer(locationOrName, bufferOrRange) {\n const location = this._getVaryingIndex(locationOrName);\n const { buffer, byteLength, byteOffset } = this._getBufferRange(bufferOrRange);\n if (location < 0) {\n this.unusedBuffers[locationOrName] = buffer;\n log.warn(`${this.id} unusedBuffers varying buffer ${locationOrName}`)();\n return;\n }\n this.buffers[location] = { buffer, byteLength, byteOffset };\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteLength);\n }\n }\n getBuffer(locationOrName) {\n if (isIndex(locationOrName)) {\n return this.buffers[locationOrName] || null;\n }\n const location = this._getVaryingIndex(locationOrName);\n return location >= 0 ? this.buffers[location] : null;\n }\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this.gl.bindTransformFeedback(36386, funcOrHandle);\n return this;\n }\n let value;\n if (!this._bound) {\n this.gl.bindTransformFeedback(36386, this.handle);\n this._bound = true;\n value = funcOrHandle();\n this._bound = false;\n this.gl.bindTransformFeedback(36386, null);\n }\n else {\n value = funcOrHandle();\n }\n return value;\n }\n unbind() {\n this.bind(null);\n }\n // PRIVATE METHODS\n /** Extract offsets for bindBufferRange */\n _getBufferRange(bufferOrRange) {\n if (bufferOrRange instanceof WEBGLBuffer) {\n return { buffer: bufferOrRange, byteOffset: 0, byteLength: bufferOrRange.byteLength };\n }\n // To use bindBufferRange either offset or size must be specified.\n // @ts-expect-error Must be a BufferRange.\n const { buffer, byteOffset = 0, byteLength = bufferOrRange.buffer.byteLength } = bufferOrRange;\n return { buffer, byteOffset, byteLength };\n }\n _getVaryingIndex(locationOrName) {\n if (isIndex(locationOrName)) {\n return Number(locationOrName);\n }\n for (const varying of this.layout.varyings) {\n if (locationOrName === varying.name) {\n return varying.location;\n }\n }\n return -1;\n }\n /**\n * Need to avoid chrome bug where buffer that is already bound to a different target\n * cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n */\n _bindBuffers() {\n for (const bufferIndex in this.buffers) {\n const { buffer, byteLength, byteOffset } = this._getBufferRange(this.buffers[bufferIndex]);\n this._bindBuffer(Number(bufferIndex), buffer, byteOffset, byteLength);\n }\n }\n _unbindBuffers() {\n for (const bufferIndex in this.buffers) {\n this.gl.bindBufferBase(35982, Number(bufferIndex), null);\n }\n }\n _bindBuffer(index, buffer, byteOffset = 0, byteLength) {\n const handle = buffer && buffer.handle;\n if (!handle || byteLength === undefined) {\n this.gl.bindBufferBase(35982, index, handle);\n }\n else {\n this.gl.bindBufferRange(35982, index, handle, byteOffset, byteLength);\n }\n }\n}\n/**\n * Returns true if the given value is an integer, or a string that\n * trivially converts to an integer (only numeric characters).\n */\nfunction isIndex(value) {\n if (typeof value === 'number') {\n return Number.isInteger(value);\n }\n return /^\\d+$/.test(value);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/** Immutable QuerySet object */\nexport class QuerySet extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n type: undefined,\n count: undefined\n };\n get [Symbol.toStringTag]() {\n return 'QuerySet';\n }\n constructor(device, props) {\n super(device, props, QuerySet.defaultProps);\n }\n}\n","// WebGL2 Query (also handles disjoint timer extensions)\nimport { QuerySet } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\n/**\n * Asynchronous queries for different kinds of information\n */\nexport class WEBGLQuerySet extends QuerySet {\n device;\n handle;\n target = null;\n _queryPending = false;\n _pollingPromise = null;\n get [Symbol.toStringTag]() {\n return 'Query';\n }\n // Create a query class\n constructor(device, props) {\n super(device, props);\n this.device = device;\n if (props.count > 1) {\n throw new Error('WebGL QuerySet can only have one value');\n }\n this.handle = this.device.gl.createQuery();\n Object.seal(this);\n }\n destroy() {\n this.device.gl.deleteQuery(this.handle);\n }\n // FOR RENDER PASS AND COMMAND ENCODER\n /**\n * Shortcut for timer query (dependent on extension in both WebGL1 and 2)\n * Measures GPU time delta between this call and a matching `end` call in the\n * GPU instruction stream.\n */\n beginTimestampQuery() {\n return this._begin(35007);\n }\n endTimestampQuery() {\n this._end();\n }\n // Shortcut for occlusion queries\n beginOcclusionQuery(options) {\n return this._begin(options?.conservative ? 36202 : 35887);\n }\n endOcclusionQuery() {\n this._end();\n }\n // Shortcut for transformFeedbackQuery\n beginTransformFeedbackQuery() {\n return this._begin(35976);\n }\n endTransformFeedbackQuery() {\n this._end();\n }\n async resolveQuery() {\n const value = await this.pollQuery();\n return [value];\n }\n // PRIVATE METHODS\n /**\n * Due to OpenGL API limitations, after calling `begin()` on one Query\n * instance, `end()` must be called on that same instance before\n * calling `begin()` on another query. While there can be multiple\n * outstanding queries representing disjoint `begin()`/`end()` intervals.\n * It is not possible to interleave or overlap `begin` and `end` calls.\n */\n _begin(target) {\n // Don't start a new query if one is already active.\n if (this._queryPending) {\n return;\n }\n this.target = target;\n this.device.gl.beginQuery(this.target, this.handle);\n return;\n }\n // ends the current query\n _end() {\n // Can't end a new query if the last one hasn't been resolved.\n if (this._queryPending) {\n return;\n }\n if (this.target) {\n this.device.gl.endQuery(this.target);\n this.target = null;\n this._queryPending = true;\n }\n return;\n }\n // Returns true if the query result is available\n isResultAvailable() {\n if (!this._queryPending) {\n return false;\n }\n const resultAvailable = this.device.gl.getQueryParameter(this.handle, 34919);\n if (resultAvailable) {\n this._queryPending = false;\n }\n return resultAvailable;\n }\n // Timing query is disjoint, i.e. results are invalid\n isTimerDisjoint() {\n return this.device.gl.getParameter(36795);\n }\n // Returns query result.\n getResult() {\n return this.device.gl.getQueryParameter(this.handle, 34918);\n }\n // Returns the query result, converted to milliseconds to match JavaScript conventions.\n getTimerMilliseconds() {\n return this.getResult() / 1e6;\n }\n // Polls the query\n pollQuery(limit = Number.POSITIVE_INFINITY) {\n if (this._pollingPromise) {\n return this._pollingPromise;\n }\n let counter = 0;\n this._pollingPromise = new Promise((resolve, reject) => {\n const poll = () => {\n if (this.isResultAvailable()) {\n resolve(this.getResult());\n this._pollingPromise = null;\n }\n else if (counter++ > limit) {\n reject('Timed out');\n this._pollingPromise = null;\n }\n else {\n requestAnimationFrame(poll);\n }\n };\n requestAnimationFrame(poll);\n });\n return this._pollingPromise;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\n// Returns number of components in a specific readPixels WebGL format\nexport function glFormatToComponents(format) {\n switch (format) {\n case 6406:\n case 33326:\n case 6403:\n return 1;\n case 33328:\n case 33319:\n return 2;\n case 6407:\n case 34837:\n return 3;\n case 6408:\n case 34836:\n return 4;\n // TODO: Add support for additional WebGL2 formats\n default:\n assert(false);\n return 0;\n }\n}\n// Return byte count for given readPixels WebGL type\nexport function glTypeToBytes(type) {\n switch (type) {\n case 5121:\n return 1;\n case 33635:\n case 32819:\n case 32820:\n return 2;\n case 5126:\n return 4;\n // TODO: Add support for additional WebGL2 types\n default:\n assert(false);\n return 0;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert, Texture, Framebuffer } from '@luma.gl/core';\nimport { GL } from '@luma.gl/constants';\nimport { getGLTypeFromTypedArray, getTypedArrayFromGLType } from \"./typed-array-utils.js\";\nimport { glFormatToComponents, glTypeToBytes } from \"./format-utils.js\";\n/**\n * Copies data from a type or a Texture object into ArrayBuffer object.\n * App can provide targetPixelArray or have it auto allocated by this method\n * newly allocated by this method unless provided by app.\n * @deprecated Use CommandEncoder.copyTextureToBuffer and Buffer.read\n * @note Slow requires roundtrip to GPU\n *\n * @param source\n * @param options\n * @returns pixel array,\n */\nexport function readPixelsToArray(source, options) {\n const { sourceX = 0, sourceY = 0, sourceFormat = 6408, sourceAttachment = 36064 // TODO - support gl.readBuffer\n } = options || {};\n let { target = null, \n // following parameters are auto deduced if not provided\n sourceWidth, sourceHeight, sourceType } = options || {};\n const { framebuffer, deleteFramebuffer } = getFramebuffer(source);\n assert(framebuffer);\n const { gl, handle } = framebuffer;\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n // TODO - Set and unset gl.readBuffer\n // if (sourceAttachment === GL.COLOR_ATTACHMENT0 && handle === null) {\n // sourceAttachment = GL.FRONT;\n // }\n const attachment = sourceAttachment - 36064;\n // assert(attachments[sourceAttachment]);\n // Deduce the type from color attachment if not provided.\n sourceType =\n sourceType ||\n framebuffer.colorAttachments[attachment]?.texture?.type || 5121;\n // Deduce type and allocated pixelArray if needed\n target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);\n // Pixel array available, if necessary, deduce type from it.\n sourceType = sourceType || getGLTypeFromTypedArray(target);\n const prevHandle = gl.bindFramebuffer(36160, handle);\n gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);\n // @ts-expect-error\n gl.bindFramebuffer(36160, prevHandle || null);\n if (deleteFramebuffer) {\n framebuffer.destroy();\n }\n return target;\n}\n/**\n * Copies data from a Framebuffer or a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.\n * @deprecated Use CommandEncoder\n * @param source\n * @param options\n */\nexport function readPixelsToBuffer(source, options) {\n const { target, sourceX = 0, sourceY = 0, sourceFormat = 6408, targetByteOffset = 0 } = options || {};\n // following parameters are auto deduced if not provided\n let { sourceWidth, sourceHeight, sourceType } = options || {};\n const { framebuffer, deleteFramebuffer } = getFramebuffer(source);\n assert(framebuffer);\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature\n const webglFramebuffer = framebuffer;\n // deduce type if not available.\n sourceType = sourceType || 5121;\n let webglBufferTarget = target;\n if (!webglBufferTarget) {\n // Create new buffer with enough size\n const components = glFormatToComponents(sourceFormat);\n const byteCount = glTypeToBytes(sourceType);\n const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;\n webglBufferTarget = webglFramebuffer.device.createBuffer({ byteLength });\n }\n // TODO(donmccurdy): Do we have tests to confirm this is working?\n const commandEncoder = source.device.createCommandEncoder();\n commandEncoder.copyTextureToBuffer({\n source: source,\n width: sourceWidth,\n height: sourceHeight,\n origin: [sourceX, sourceY],\n destination: webglBufferTarget,\n byteOffset: targetByteOffset\n });\n commandEncoder.destroy();\n if (deleteFramebuffer) {\n framebuffer.destroy();\n }\n return webglBufferTarget;\n}\n/**\n * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)\n * @deprecated Use CommandEncoder\n */\n// eslint-disable-next-line complexity, max-statements\nexport function copyToTexture(source, target, options) {\n const { sourceX = 0, sourceY = 0, \n // attachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer\n targetMipmaplevel = 0, targetInternalFormat = 6408 } = options || {};\n let { targetX, targetY, targetZ, width, // defaults to target width\n height // defaults to target height\n } = options || {};\n const { framebuffer, deleteFramebuffer } = getFramebuffer(source);\n assert(framebuffer);\n const webglFramebuffer = framebuffer;\n const { device, handle } = webglFramebuffer;\n const isSubCopy = typeof targetX !== 'undefined' ||\n typeof targetY !== 'undefined' ||\n typeof targetZ !== 'undefined';\n targetX = targetX || 0;\n targetY = targetY || 0;\n targetZ = targetZ || 0;\n const prevHandle = device.gl.bindFramebuffer(36160, handle);\n // TODO - support gl.readBuffer (WebGL2 only)\n // const prevBuffer = gl.readBuffer(attachment);\n assert(target);\n let texture = null;\n let textureTarget;\n if (target instanceof Texture) {\n texture = target;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n textureTarget = texture.target;\n }\n else {\n textureTarget = target;\n }\n if (!isSubCopy) {\n device.gl.copyTexImage2D(textureTarget, targetMipmaplevel, targetInternalFormat, sourceX, sourceY, width, height, 0 /* border must be 0 */);\n }\n else {\n switch (textureTarget) {\n case 3553:\n case 34067:\n device.gl.copyTexSubImage2D(textureTarget, targetMipmaplevel, targetX, targetY, sourceX, sourceY, width, height);\n break;\n case 35866:\n case 32879:\n device.gl.copyTexSubImage3D(textureTarget, targetMipmaplevel, targetX, targetY, targetZ, sourceX, sourceY, width, height);\n break;\n default:\n }\n }\n if (texture) {\n texture.unbind();\n }\n // @ts-expect-error\n device.gl.bindFramebuffer(36160, prevHandle || null);\n if (deleteFramebuffer) {\n framebuffer.destroy();\n }\n return texture;\n}\nfunction getFramebuffer(source) {\n if (!(source instanceof Framebuffer)) {\n return { framebuffer: toFramebuffer(source), deleteFramebuffer: true };\n }\n return { framebuffer: source, deleteFramebuffer: false };\n}\n/**\n * Wraps a given texture into a framebuffer object, that can be further used\n * to read data from the texture object.\n */\nexport function toFramebuffer(texture, props) {\n const { device, width, height, id } = texture;\n const framebuffer = device.createFramebuffer({\n ...props,\n id: `framebuffer-for-${id}`,\n width,\n height,\n colorAttachments: [texture]\n });\n return framebuffer;\n}\nfunction getPixelArray(pixelArray, type, format, width, height) {\n if (pixelArray) {\n return pixelArray;\n }\n // Allocate pixel array if not already available, using supplied type\n type = type || 5121;\n const ArrayType = getTypedArrayFromGLType(type, { clamped: false });\n const components = glFormatToComponents(format);\n // TODO - check for composite type (components = 1).\n return new ArrayType(width * height * components);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@luma.gl/core';\nimport { withGLParameters } from \"../context/state-tracker/with-parameters.js\";\n// Should collapse during minification\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\nconst GL_COLOR = 0x1800;\nconst GL_DEPTH = 0x1801;\nconst GL_STENCIL = 0x1802;\nconst GL_DEPTH_STENCIL = 0x84f9;\n// Should disappear if asserts are removed\nconst ERR_ARGUMENTS = 'clear: bad arguments';\n/**\n * Optionally clears depth, color and stencil buffers\n * @deprecated Set clear color when creating a RenderPass.\n */\nexport function clear(device, options) {\n const { framebuffer = null, color = null, depth = null, stencil = null } = options || {};\n const parameters = {};\n if (framebuffer) {\n parameters.framebuffer = framebuffer;\n }\n let clearFlags = 0;\n if (color) {\n clearFlags |= GL_COLOR_BUFFER_BIT;\n if (color !== true) {\n parameters.clearColor = color;\n }\n }\n if (depth) {\n clearFlags |= GL_DEPTH_BUFFER_BIT;\n if (depth !== true) {\n parameters.clearDepth = depth;\n }\n }\n if (stencil) {\n clearFlags |= GL_STENCIL_BUFFER_BIT;\n if (depth !== true) {\n parameters.clearStencil = depth;\n }\n }\n assert(clearFlags !== 0, ERR_ARGUMENTS);\n // Temporarily set any clear \"colors\" and call clear\n const gl = device.gl;\n withGLParameters(gl, parameters, () => {\n gl.clear(clearFlags);\n });\n}\n/**\n * WebGL2 - clear a specific drawing buffer\n * @deprecated Set clear color when creating a RenderPass\n */\nexport function clearBuffer(device, options) {\n const { framebuffer = null, buffer = GL_COLOR, drawBuffer = 0, value = [0, 0, 0, 0] } = options || {};\n const gl = device.gl;\n withGLParameters(gl, { framebuffer }, () => {\n // Method selection per OpenGL ES 3 docs\n switch (buffer) {\n case GL_COLOR:\n switch (value.constructor) {\n case Int32Array:\n gl.clearBufferiv(buffer, drawBuffer, value);\n break;\n case Uint32Array:\n gl.clearBufferuiv(buffer, drawBuffer, value);\n break;\n case Float32Array:\n default:\n gl.clearBufferfv(buffer, drawBuffer, value);\n }\n break;\n case GL_DEPTH:\n gl.clearBufferfv(GL_DEPTH, 0, [value]);\n break;\n case GL_STENCIL:\n gl.clearBufferiv(GL_STENCIL, 0, [value]);\n break;\n case GL_DEPTH_STENCIL:\n const [depth, stencil] = value;\n gl.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n break;\n default:\n assert(false, ERR_ARGUMENTS);\n }\n });\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Device, CanvasContext, log, uid, assert } from '@luma.gl/core';\nimport { popContextState, pushContextState, trackContextState } from \"../context/state-tracker/track-context-state.js\";\nimport { createBrowserContext } from \"../context/helpers/create-browser-context.js\";\nimport { getDeviceInfo } from \"./device-helpers/webgl-device-info.js\";\nimport { WebGLDeviceFeatures } from \"./device-helpers/webgl-device-features.js\";\nimport { WebGLDeviceLimits } from \"./device-helpers/webgl-device-limits.js\";\nimport { WebGLCanvasContext } from \"./webgl-canvas-context.js\";\nimport { loadSpectorJS, initializeSpectorJS } from \"../context/debug/spector.js\";\nimport { loadWebGLDeveloperTools, makeDebugContext } from \"../context/debug/webgl-developer-tools.js\";\nimport { isTextureFormatSupported, isTextureFormatRenderable, isTextureFormatFilterable } from \"./converters/texture-formats.js\";\nimport { WEBGLBuffer } from \"./resources/webgl-buffer.js\";\nimport { WEBGLShader } from \"./resources/webgl-shader.js\";\nimport { WEBGLSampler } from \"./resources/webgl-sampler.js\";\nimport { WEBGLTexture } from \"./resources/webgl-texture.js\";\nimport { WEBGLFramebuffer } from \"./resources/webgl-framebuffer.js\";\nimport { WEBGLRenderPass } from \"./resources/webgl-render-pass.js\";\nimport { WEBGLRenderPipeline } from \"./resources/webgl-render-pipeline.js\";\nimport { WEBGLCommandEncoder } from \"./resources/webgl-command-encoder.js\";\nimport { WEBGLVertexArray } from \"./resources/webgl-vertex-array.js\";\nimport { WEBGLTransformFeedback } from \"./resources/webgl-transform-feedback.js\";\nimport { WEBGLQuerySet } from \"./resources/webgl-query-set.js\";\nimport { readPixelsToArray, readPixelsToBuffer } from \"../classic/copy-and-blit.js\";\nimport { setGLParameters, getGLParameters, resetGLParameters } from \"../context/parameters/unified-parameter-api.js\";\nimport { withGLParameters } from \"../context/state-tracker/with-parameters.js\";\nimport { clear } from \"../classic/clear.js\";\nimport { getWebGLExtension } from \"../context/helpers/webgl-extensions.js\";\nconst LOG_LEVEL = 1;\n/** WebGPU style Device API for a WebGL context */\nexport class WebGLDevice extends Device {\n //\n // Public `Device` API\n //\n /** type of this device */\n static type = 'webgl';\n /** type of this device */\n type = 'webgl';\n /** The underlying WebGL context */\n handle;\n features;\n limits;\n info;\n canvasContext;\n lost;\n _resolveContextLost;\n //\n // Static methods, expected to be present by `luma.createDevice()`\n //\n /** Check if WebGL 2 is available */\n static isSupported() {\n return typeof WebGL2RenderingContext !== 'undefined';\n }\n /**\n * Get a device instance from a GL context\n * Creates and instruments the device if not already created\n * @param gl\n * @returns\n */\n static attach(gl) {\n if (gl instanceof WebGLDevice) {\n return gl;\n }\n // @ts-expect-error\n if (gl?.device instanceof Device) {\n // @ts-expect-error\n return gl.device;\n }\n if (!isWebGL(gl)) {\n throw new Error('Invalid WebGL2RenderingContext');\n }\n return new WebGLDevice({ gl: gl });\n }\n static async create(props = {}) {\n log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created')();\n const promises = [];\n // Load webgl and spector debug scripts from CDN if requested\n if (props.debug) {\n promises.push(loadWebGLDeveloperTools());\n }\n if (props.spector) {\n promises.push(loadSpectorJS());\n }\n // Wait for page to load: if canvas is a string we need to query the DOM for the canvas element.\n // We only wait when props.canvas is string to avoids setting the global page onload callback unless necessary.\n if (typeof props.canvas === 'string') {\n promises.push(CanvasContext.pageLoaded);\n }\n // Wait for all the loads to settle before creating the context.\n // The Device.create() functions are async, so in contrast to the constructor, we can `await` here.\n const results = await Promise.allSettled(promises);\n for (const result of results) {\n if (result.status === 'rejected') {\n log.error(`Failed to initialize debug libraries ${result.reason}`)();\n }\n }\n log.probe(LOG_LEVEL + 1, 'DOM is loaded')();\n // @ts-expect-error\n if (props.gl?.device) {\n log.warn('reattaching existing device')();\n return WebGLDevice.attach(props.gl);\n }\n const device = new WebGLDevice(props);\n // Log some debug info about the newly created context\n const message = `\\\nCreated ${device.type}${device.debug ? ' debug' : ''} context: \\\n${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;\n log.probe(LOG_LEVEL, message)();\n log.table(LOG_LEVEL, device.info)();\n log.groupEnd(LOG_LEVEL)();\n return device;\n }\n //\n // Public API\n //\n constructor(props) {\n super({ ...props, id: props.id || uid('webgl-device') });\n // If attaching to an already attached context, return the attached device\n // @ts-expect-error device is attached to context\n const device = props.gl?.device;\n if (device) {\n throw new Error(`WebGL context already attached to device ${device.id}`);\n }\n // Create and instrument context\n const canvas = props.gl?.canvas || props.canvas;\n this.canvasContext = new WebGLCanvasContext(this, { ...props, canvas });\n this.lost = new Promise(resolve => {\n this._resolveContextLost = resolve;\n });\n let gl = props.gl || null;\n gl ||= createBrowserContext(this.canvasContext.canvas, {\n ...props,\n onContextLost: (event) => this._resolveContextLost?.({\n reason: 'destroyed',\n message: 'Entered sleep mode, or too many apps or browser tabs are using the GPU.'\n })\n });\n if (!gl) {\n throw new Error('WebGL context creation failed');\n }\n this.handle = gl;\n this.gl = gl;\n this.gl.device = this; // Update GL context: Link webgl context back to device\n this.gl._version = 2; // Update GL context: Store WebGL version field on gl context (HACK to identify debug contexts)\n if (props.spector) {\n this.spectorJS = initializeSpectorJS({ ...this.props, canvas: this.handle.canvas });\n }\n // luma Device fields\n this.info = getDeviceInfo(this.gl, this._extensions);\n this.limits = new WebGLDeviceLimits(this.gl);\n this.features = new WebGLDeviceFeatures(this.gl, this._extensions, this.props.disabledFeatures);\n if (this.props.initalizeFeatures) {\n this.features.initializeFeatures();\n }\n this.canvasContext.resize();\n // Install context state tracking\n // @ts-expect-error - hidden parameters\n const { enable = true, copyState = false } = props;\n trackContextState(this.gl, {\n enable,\n copyState,\n log: (...args) => log.log(1, ...args)()\n });\n // DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1\n if (props.debug) {\n this.gl = makeDebugContext(this.gl, { ...props, throwOnError: true });\n this.debug = true;\n log.level = Math.max(log.level, 1);\n log.warn('WebGL debug mode activated. Performance reduced.')();\n }\n }\n /**\n * Destroys the context\n * @note Has no effect for WebGL browser contexts, there is no browser API for destroying contexts\n */\n destroy() { }\n get isLost() {\n return this.gl.isContextLost();\n }\n getSize() {\n return [this.gl.drawingBufferWidth, this.gl.drawingBufferHeight];\n }\n isTextureFormatSupported(format) {\n return isTextureFormatSupported(this.gl, format, this._extensions);\n }\n isTextureFormatFilterable(format) {\n return isTextureFormatFilterable(this.gl, format, this._extensions);\n }\n isTextureFormatRenderable(format) {\n return isTextureFormatRenderable(this.gl, format, this._extensions);\n }\n // IMPLEMENTATION OF ABSTRACT DEVICE\n createCanvasContext(props) {\n throw new Error('WebGL only supports a single canvas');\n }\n createBuffer(props) {\n const newProps = this._getBufferProps(props);\n return new WEBGLBuffer(this, newProps);\n }\n _createTexture(props) {\n return new WEBGLTexture(this, props);\n }\n createExternalTexture(props) {\n throw new Error('createExternalTexture() not implemented'); // return new Program(props);\n }\n createSampler(props) {\n return new WEBGLSampler(this, props);\n }\n createShader(props) {\n return new WEBGLShader(this, props);\n }\n createFramebuffer(props) {\n return new WEBGLFramebuffer(this, props);\n }\n createVertexArray(props) {\n return new WEBGLVertexArray(this, props);\n }\n createTransformFeedback(props) {\n return new WEBGLTransformFeedback(this, props);\n }\n createQuerySet(props) {\n return new WEBGLQuerySet(this, props);\n }\n createRenderPipeline(props) {\n return new WEBGLRenderPipeline(this, props);\n }\n beginRenderPass(props) {\n return new WEBGLRenderPass(this, props);\n }\n createComputePipeline(props) {\n throw new Error('ComputePipeline not supported in WebGL');\n }\n beginComputePass(props) {\n throw new Error('ComputePass not supported in WebGL');\n }\n renderPass = null;\n createCommandEncoder(props) {\n return new WEBGLCommandEncoder(this, props);\n }\n /**\n * Offscreen Canvas Support: Commit the frame\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/commit\n * Chrome's offscreen canvas does not require gl.commit\n */\n submit() {\n this.renderPass?.end();\n this.renderPass = null;\n // this.canvasContext.commit();\n }\n //\n // TEMPORARY HACKS - will be removed in v9.1\n //\n /** @deprecated - should use command encoder */\n readPixelsToArrayWebGL(source, options) {\n return readPixelsToArray(source, options);\n }\n /** @deprecated - should use command encoder */\n readPixelsToBufferWebGL(source, options) {\n return readPixelsToBuffer(source, options);\n }\n setParametersWebGL(parameters) {\n setGLParameters(this.gl, parameters);\n }\n getParametersWebGL(parameters) {\n return getGLParameters(this.gl, parameters);\n }\n withParametersWebGL(parameters, func) {\n return withGLParameters(this.gl, parameters, func);\n }\n clearWebGL(options) {\n clear(this, options);\n }\n resetWebGL() {\n log.warn('WebGLDevice.resetWebGL is deprecated, use only for debugging')();\n resetGLParameters(this.gl);\n }\n //\n // WebGL-only API (not part of `Device` API)\n //\n /** WebGL2 context. */\n gl;\n debug = false;\n /** State used by luma.gl classes: TODO - move to canvasContext*/\n _canvasSizeInfo = { clientWidth: 0, clientHeight: 0, devicePixelRatio: 1 };\n /** State used by luma.gl classes - TODO - not used? */\n _extensions = {};\n _polyfilled = false;\n /** Instance of Spector.js (if initialized) */\n spectorJS;\n /**\n * Triggers device (or WebGL context) loss.\n * @note primarily intended for testing how application reacts to device loss\n */\n loseDevice() {\n let deviceLossTriggered = false;\n const extensions = this.getExtension('WEBGL_lose_context');\n const ext = extensions.WEBGL_lose_context;\n if (ext) {\n deviceLossTriggered = true;\n ext.loseContext();\n // ext.loseContext should trigger context loss callback but the platform may not do this, so do it explicitly\n }\n this._resolveContextLost?.({\n reason: 'destroyed',\n message: 'Application triggered context loss'\n });\n return deviceLossTriggered;\n }\n /** Save current WebGL context state onto an internal stack */\n pushState() {\n pushContextState(this.gl);\n }\n /** Restores previously saved context state */\n popState() {\n popContextState(this.gl);\n }\n /**\n * Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension\n * luma.gl ids and props can be inspected\n */\n setSpectorMetadata(handle, props) {\n // @ts-expect-error\n // eslint-disable-next-line camelcase\n handle.__SPECTOR_Metadata = props;\n }\n /**\n * Returns the GL. constant that corresponds to a numeric value of a GL constant\n * Be aware that there are some duplicates especially for constants that are 0,\n * so this isn't guaranteed to return the right key in all cases.\n */\n getGLKey(value, gl) {\n // @ts-ignore expect-error depends on settings\n gl = gl || this.gl2 || this.gl;\n const number = Number(value);\n for (const key in gl) {\n // @ts-ignore expect-error depends on settings\n if (gl[key] === number) {\n return `GL.${key}`;\n }\n }\n // No constant found. Stringify the value and return it.\n return String(value);\n }\n /** Store constants */\n _constants;\n /**\n * Set a constant value for a location. Disabled attributes at that location will read from this value\n * @note WebGL constants are stored globally on the WebGL context, not the VertexArray\n * so they need to be updated before every render\n * @todo - remember/cache values to avoid setting them unnecessarily?\n */\n setConstantAttributeWebGL(location, constant) {\n const maxVertexAttributes = this.limits.maxVertexAttributes;\n this._constants = this._constants || new Array(maxVertexAttributes).fill(null);\n const currentConstant = this._constants[location];\n if (currentConstant && compareConstantArrayValues(currentConstant, constant)) {\n log.info(1, `setConstantAttributeWebGL(${location}) could have been skipped, value unchanged`)();\n }\n this._constants[location] = constant;\n switch (constant.constructor) {\n case Float32Array:\n setConstantFloatArray(this, location, constant);\n break;\n case Int32Array:\n setConstantIntArray(this, location, constant);\n break;\n case Uint32Array:\n setConstantUintArray(this, location, constant);\n break;\n default:\n assert(false);\n }\n }\n /** Ensure extensions are only requested once */\n getExtension(name) {\n getWebGLExtension(this.gl, name, this._extensions);\n return this._extensions;\n }\n}\n/** Check if supplied parameter is a WebGL2RenderingContext */\nfunction isWebGL(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n // Look for debug contexts, headless gl etc\n return Boolean(gl && Number.isFinite(gl._version));\n}\n/** Set constant float array attribute */\nfunction setConstantFloatArray(device, location, array) {\n switch (array.length) {\n case 1:\n device.gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n device.gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n device.gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n device.gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n}\n/** Set constant signed int array attribute */\nfunction setConstantIntArray(device, location, array) {\n device.gl.vertexAttribI4iv(location, array);\n // TODO - not clear if we need to use the special forms, more testing needed\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1iv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2iv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3iv(location, array);\n // break;\n // case 4:\n // break;\n // default:\n // assert(false);\n // }\n}\n/** Set constant unsigned int array attribute */\nfunction setConstantUintArray(device, location, array) {\n device.gl.vertexAttribI4uiv(location, array);\n // TODO - not clear if we need to use the special forms, more testing needed\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1uiv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2uiv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3uiv(location, array);\n // break;\n // case 4:\n // gl.vertexAttribI4uiv(location, array);\n // break;\n // default:\n // assert(false);\n // }\n}\n/**\n * Compares contents of two typed arrays\n * @todo max length?\n */\nfunction compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma } from '@luma.gl/core';\nimport { requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/core';\nimport { Stats } from '@probe.gl/stats';\nlet statIdCounter = 0;\nconst DEFAULT_ANIMATION_LOOP_PROPS = {\n device: null,\n onAddHTML: () => '',\n onInitialize: async () => {\n return null;\n },\n onRender: () => { },\n onFinalize: () => { },\n onError: error => console.error(error), // eslint-disable-line no-console\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: false,\n autoResizeDrawingBuffer: false\n};\n/** Convenient animation loop */\nexport class AnimationLoop {\n device = null;\n canvas = null;\n props;\n animationProps = null;\n timeline = null;\n stats;\n cpuTime;\n gpuTime;\n frameRate;\n display;\n needsRedraw = 'initialized';\n _initialized = false;\n _running = false;\n _animationFrameId = null;\n _nextFramePromise = null;\n _resolveNextFrame = null;\n _cpuStartTime = 0;\n // _gpuTimeQuery: Query | null = null;\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props) {\n this.props = { ...DEFAULT_ANIMATION_LOOP_PROPS, ...props };\n props = this.props;\n if (!props.device) {\n throw new Error('No device provided');\n }\n const { useDevicePixels = true } = this.props;\n // state\n this.stats = props.stats || new Stats({ id: 'animation-loop-stats' });\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n destroy() {\n this.stop();\n this._setDisplay(null);\n }\n /** @deprecated Use .destroy() */\n delete() {\n this.destroy();\n }\n /** Flags this animation loop as needing redraw */\n setNeedsRedraw(reason) {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n /** TODO - move these props to CanvasContext? */\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport || false;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels || false;\n }\n return this;\n }\n /** Starts a render loop if not already running */\n async start() {\n if (this._running) {\n return this;\n }\n this._running = true;\n try {\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._initDevice();\n this._initialize();\n // Note: onIntialize can return a promise (e.g. in case app needs to load resources)\n await this.props.onInitialize(this._getAnimationProps());\n }\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n return this;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error('Unknown error');\n this.props.onError(error);\n // this._running = false; // TODO\n throw error;\n }\n }\n /** Stops a render loop if already running, finalizing */\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n // call callback\n // If stop is called immediately, we can end up in a state where props haven't been initialized...\n if (this.animationProps) {\n this.props.onFinalize(this.animationProps);\n }\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n /** Explicitly draw a frame */\n redraw() {\n if (this.device?.isLost) {\n return this;\n }\n this._beginFrameTimers();\n this._setupFrame();\n this._updateAnimationProps();\n this._renderFrame(this._getAnimationProps());\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n this._endFrameTimers();\n return this;\n }\n /** Add a timeline, it will be automatically updated by the animation loop. */\n attachTimeline(timeline) {\n this.timeline = timeline;\n return this.timeline;\n }\n /** Remove a timeline */\n detachTimeline() {\n this.timeline = null;\n }\n /** Wait until a render completes */\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n /** TODO - should use device.deviceContext */\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n if (this.canvas instanceof HTMLCanvasElement) {\n return this.canvas.toDataURL();\n }\n throw new Error('OffscreenCanvas');\n }\n // PRIVATE METHODS\n _initialize() {\n this._startEventHandling();\n // Initialize the callback data\n this._initializeAnimationProps();\n this._updateAnimationProps();\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n _setDisplay(display) {\n if (this.display) {\n this.display.destroy();\n this.display.animationLoop = null;\n }\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n this.display = display;\n }\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n _cancelAnimationFrame() {\n if (this._animationFrameId === null) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(animationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(animationProps);\n return;\n }\n // call callback\n this.props.onRender(this._getAnimationProps());\n // end callback\n // Submit commands (necessary on WebGPU)\n this.device.submit();\n }\n _clearNeedsRedraw() {\n this.needsRedraw = false;\n }\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n }\n // Initialize the object that will be passed to app callbacks\n _initializeAnimationProps() {\n if (!this.device) {\n throw new Error('loop');\n }\n this.animationProps = {\n animationLoop: this,\n device: this.device,\n canvas: this.device?.canvasContext?.canvas,\n timeline: this.timeline,\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: false,\n // Placeholders\n width: 1,\n height: 1,\n aspect: 1,\n // Animation props\n time: 0,\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n // Experimental\n _mousePosition: null // Event props\n };\n }\n _getAnimationProps() {\n if (!this.animationProps) {\n throw new Error('animationProps');\n }\n return this.animationProps;\n }\n // Update the context object that will be passed to app callbacks\n _updateAnimationProps() {\n if (!this.animationProps) {\n return;\n }\n // Can this be replaced with canvas context?\n const { width, height, aspect } = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n this.animationProps.needsRedraw = this.needsRedraw;\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n /** Wait for supplied device */\n async _initDevice() {\n this.device = await this.props.device;\n if (!this.device) {\n throw new Error('No device provided');\n }\n this.canvas = this.device.canvasContext?.canvas || null;\n // this._createInfoDiv();\n }\n _createInfoDiv() {\n if (this.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (this.canvas instanceof HTMLCanvasElement) {\n wrapperDiv.appendChild(this.canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n _getSizeAndAspect() {\n if (!this.device) {\n return { width: 1, height: 1, aspect: 1 };\n }\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const [width, height] = this.device?.canvasContext?.getPixelSize() || [1, 1];\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = this.device?.canvasContext?.canvas;\n // @ts-expect-error\n if (canvas && canvas.clientHeight) {\n // @ts-expect-error\n aspect = canvas.clientWidth / canvas.clientHeight;\n }\n else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n return { width, height, aspect };\n }\n /** Default viewport setup */\n _resizeViewport() {\n // TODO can we use canvas context to code this in a portable way?\n // @ts-expect-error Expose on canvasContext\n if (this.props.autoResizeViewport && this.device.gl) {\n // @ts-expect-error Expose canvasContext\n this.device.gl.viewport(0, 0, \n // @ts-expect-error Expose canvasContext\n this.device.gl.drawingBufferWidth, \n // @ts-expect-error Expose canvasContext\n this.device.gl.drawingBufferHeight);\n }\n }\n /**\n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n this.device?.canvasContext?.resize({ useDevicePixels: this.props.useDevicePixels });\n }\n }\n _beginFrameTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n this.cpuTime.timeStart();\n }\n _endFrameTimers() {\n this.cpuTime.timeEnd();\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n // Event handling\n _startEventHandling() {\n if (this.canvas) {\n this.canvas.addEventListener('mousemove', this._onMousemove.bind(this));\n this.canvas.addEventListener('mouseleave', this._onMouseleave.bind(this));\n }\n }\n _onMousemove(event) {\n if (event instanceof MouseEvent) {\n this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];\n }\n }\n _onMouseleave(event) {\n this._getAnimationProps()._mousePosition = null;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Node.js polyfills for requestAnimationFrame and cancelAnimationFrame\n/* global window, setTimeout, clearTimeout */\n// / \nexport function requestAnimationFrame(callback) {\n return typeof window !== 'undefined' && window.requestAnimationFrame\n ? window.requestAnimationFrame(callback)\n : setTimeout(callback, 1000 / 60);\n}\nexport function cancelAnimationFrame(timerId) {\n return typeof window !== 'undefined' && window.cancelAnimationFrame\n ? window.cancelAnimationFrame(timerId)\n : clearTimeout(timerId);\n}\n","/**\n * This file contains overrides the default\n * hammer.js functions to add our own utility\n */\n/* eslint-disable */\n\n/* Hammer.js constants */\nconst INPUT_START = 1;\nconst INPUT_MOVE = 2;\nconst INPUT_END = 4;\nconst MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\n/**\n * Helper function that returns true if any element in an array meets given criteria.\n * Because older browsers do not support `Array.prototype.some`\n * @params array {Array}\n * @params predict {Function}\n */\nfunction some(array, predict) {\n for (let i = 0; i < array.length; i++) {\n if (predict(array[i])) {\n return true;\n }\n }\n return false;\n}\n\n/* eslint-disable no-invalid-this */\nexport function enhancePointerEventInput(PointerEventInput) {\n const oldHandler = PointerEventInput.prototype.handler;\n\n // overrides PointerEventInput.handler to accept right mouse button\n PointerEventInput.prototype.handler = function handler(ev) {\n const store = this.store;\n\n // Allow non-left mouse buttons through\n if (ev.button > 0 && ev.type === 'pointerdown') {\n if (!some(store, e => e.pointerId === ev.pointerId)) {\n store.push(ev);\n }\n }\n\n oldHandler.call(this, ev);\n };\n}\n\n// overrides MouseInput.handler to accept right mouse button\nexport function enhanceMouseInput(MouseInput) {\n MouseInput.prototype.handler = function handler(ev) {\n let eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the mouse button down\n if (eventType & INPUT_START && ev.button >= 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.buttons === 0) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: 'mouse',\n srcEvent: ev\n });\n };\n}\n","import * as hammerjs from 'hammerjs';\nimport {enhancePointerEventInput, enhanceMouseInput} from './hammer-overrides';\n\nenhancePointerEventInput(hammerjs.PointerEventInput);\nenhanceMouseInput(hammerjs.MouseInput);\n\nexport const Manager = hammerjs.Manager;\n\nexport default hammerjs;\n","import type {MjolnirEventRaw} from '../types';\n\nexport interface InputOptions {\n enable: boolean;\n events?: string[];\n}\n\nexport default class Input {\n element: HTMLElement;\n options: Options;\n callback: (e: EventType) => void;\n\n constructor(element: HTMLElement, callback: (e: EventType) => void, options: Options) {\n this.element = element;\n this.callback = callback;\n\n this.options = {enable: true, ...options};\n }\n}\n","import Hammer from './utils/hammer';\nimport {RecognizerTuple} from './types';\n\n// This module contains constants that must be conditionally required\n// due to `window`/`document` references downstream.\nexport const RECOGNIZERS: RecognizerTuple[] = Hammer\n ? [\n [Hammer.Pan, {event: 'tripan', pointers: 3, threshold: 0, enable: false}],\n [Hammer.Rotate, {enable: false}],\n [Hammer.Pinch, {enable: false}],\n [Hammer.Swipe, {enable: false}],\n [Hammer.Pan, {threshold: 0, enable: false}],\n [Hammer.Press, {enable: false}],\n [Hammer.Tap, {event: 'doubletap', taps: 2, enable: false}],\n // TODO - rename to 'tap' and 'singletap' in the next major release\n [Hammer.Tap, {event: 'anytap', enable: false}],\n [Hammer.Tap, {enable: false}]\n ]\n : null;\n\n// Recognize the following gestures even if a given recognizer succeeds\nexport const RECOGNIZER_COMPATIBLE_MAP = {\n tripan: ['rotate', 'pinch', 'pan'],\n rotate: ['pinch'],\n pinch: ['pan'],\n pan: ['press', 'doubletap', 'anytap', 'tap'],\n doubletap: ['anytap'],\n anytap: ['tap']\n} as const;\n\n// Recognize the folling gestures only if a given recognizer fails\nexport const RECOGNIZER_FALLBACK_MAP = {\n doubletap: ['tap']\n} as const;\n\n/**\n * Only one set of basic input events will be fired by Hammer.js:\n * either pointer, touch, or mouse, depending on system support.\n * In order to enable an application to be agnostic of system support,\n * alias basic input events into \"classes\" of events: down, move, and up.\n * See `_onBasicInput()` for usage of these aliases.\n */\nexport const BASIC_EVENT_ALIASES = {\n pointerdown: 'pointerdown',\n pointermove: 'pointermove',\n pointerup: 'pointerup',\n touchstart: 'pointerdown',\n touchmove: 'pointermove',\n touchend: 'pointerup',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup'\n} as const;\n\nexport const INPUT_EVENT_TYPES = {\n KEY_EVENTS: ['keydown', 'keyup'],\n MOUSE_EVENTS: ['mousedown', 'mousemove', 'mouseup', 'mouseover', 'mouseout', 'mouseleave'],\n WHEEL_EVENTS: [\n // Chrome, Safari\n 'wheel',\n // IE\n 'mousewheel'\n ]\n} as const;\n\n/**\n * \"Gestural\" events are those that have semantic meaning beyond the basic input event,\n * e.g. a click or tap is a sequence of `down` and `up` events with no `move` event in between.\n * Hammer.js handles these with its Recognizer system;\n * this block maps event names to the Recognizers required to detect the events.\n */\nexport const EVENT_RECOGNIZER_MAP = {\n tap: 'tap',\n anytap: 'anytap',\n doubletap: 'doubletap',\n press: 'press',\n pinch: 'pinch',\n pinchin: 'pinch',\n pinchout: 'pinch',\n pinchstart: 'pinch',\n pinchmove: 'pinch',\n pinchend: 'pinch',\n pinchcancel: 'pinch',\n rotate: 'rotate',\n rotatestart: 'rotate',\n rotatemove: 'rotate',\n rotateend: 'rotate',\n rotatecancel: 'rotate',\n tripan: 'tripan',\n tripanstart: 'tripan',\n tripanmove: 'tripan',\n tripanup: 'tripan',\n tripandown: 'tripan',\n tripanleft: 'tripan',\n tripanright: 'tripan',\n tripanend: 'tripan',\n tripancancel: 'tripan',\n pan: 'pan',\n panstart: 'pan',\n panmove: 'pan',\n panup: 'pan',\n pandown: 'pan',\n panleft: 'pan',\n panright: 'pan',\n panend: 'pan',\n pancancel: 'pan',\n swipe: 'swipe',\n swipeleft: 'swipe',\n swiperight: 'swipe',\n swipeup: 'swipe',\n swipedown: 'swipe'\n} as const;\n\n/**\n * Map gestural events typically provided by browsers\n * that are not reported in 'hammer.input' events\n * to corresponding Hammer.js gestures.\n */\nexport const GESTURE_EVENT_ALIASES = {\n click: 'tap',\n anyclick: 'anytap',\n dblclick: 'doubletap',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup',\n mouseover: 'pointerover',\n mouseout: 'pointerout',\n mouseleave: 'pointerleave'\n} as const;\n","// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global'\n\n/* global window, global, document, navigator */\nexport const userAgent =\n typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent.toLowerCase() : '';\n\nconst window_ = typeof window !== 'undefined' ? window : global;\nconst global_ = typeof global !== 'undefined' ? global : window;\nconst document_ = typeof document !== 'undefined' ? document : {};\n\nexport {window_ as window, global_ as global, document_ as document};\n\n/*\n * Detect whether passive option is supported by the current browser.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n #Safely_detecting_option_support\n */\nlet passiveSupported = false;\n\n/* eslint-disable accessor-pairs, no-empty */\ntry {\n const options = {\n // This function will be called when the browser\n // attempts to access the passive property.\n get passive() {\n passiveSupported = true;\n return true;\n }\n };\n\n window_.addEventListener('test', null, options);\n window_.removeEventListener('test', null);\n} catch (err) {\n passiveSupported = false;\n}\n\nexport {passiveSupported};\n","import type {MjolnirWheelEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nimport {INPUT_EVENT_TYPES} from '../constants';\nimport {window, userAgent, passiveSupported} from '../utils/globals';\n\nconst firefox = userAgent.indexOf('firefox') !== -1;\n\nconst {WHEEL_EVENTS} = INPUT_EVENT_TYPES;\nconst EVENT_TYPE = 'wheel';\n\n// Constants for normalizing input delta\nconst WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;\nconst WHEEL_DELTA_PER_LINE = 40;\n// Slow down zoom if shift key is held for more precise zooming\nconst SHIFT_MULTIPLIER = 0.25;\n\nexport default class WheelInput extends Input {\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirWheelEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n this.events = (this.options.events || []).concat(WHEEL_EVENTS);\n\n this.events.forEach(event =>\n element.addEventListener(event, this.handleEvent, passiveSupported ? {passive: false} : false)\n );\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n\n /* eslint-disable complexity, max-statements */\n handleEvent = (event: WheelEvent) => {\n if (!this.options.enable) {\n return;\n }\n\n let value = event.deltaY;\n if (window.WheelEvent) {\n // Firefox doubles the values on retina screens...\n if (firefox && event.deltaMode === window.WheelEvent.DOM_DELTA_PIXEL) {\n value /= window.devicePixelRatio;\n }\n if (event.deltaMode === window.WheelEvent.DOM_DELTA_LINE) {\n value *= WHEEL_DELTA_PER_LINE;\n }\n }\n\n if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {\n // This one is definitely a mouse wheel event.\n // Normalize this value to match trackpad.\n value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);\n }\n\n if (event.shiftKey && value) {\n value = value * SHIFT_MULTIPLIER;\n }\n\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n delta: -value,\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n };\n}\n","import type {MjolnirPointerEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\nimport {INPUT_EVENT_TYPES} from '../constants';\n\nconst {MOUSE_EVENTS} = INPUT_EVENT_TYPES;\nconst MOVE_EVENT_TYPE = 'pointermove';\nconst OVER_EVENT_TYPE = 'pointerover';\nconst OUT_EVENT_TYPE = 'pointerout';\nconst ENTER_EVENT_TYPE = 'pointerenter';\nconst LEAVE_EVENT_TYPE = 'pointerleave';\n\n/**\n * Hammer.js swallows 'move' events (for pointer/touch/mouse)\n * when the pointer is not down. This class sets up a handler\n * specifically for these events to work around this limitation.\n * Note that this could be extended to more intelligently handle\n * move events across input types, e.g. storing multiple simultaneous\n * pointer/touch events, calculating speed/direction, etc.\n */\nexport default class MoveInput extends Input {\n pressed: boolean;\n enableMoveEvent: boolean;\n enableEnterEvent: boolean;\n enableLeaveEvent: boolean;\n enableOutEvent: boolean;\n enableOverEvent: boolean;\n\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirPointerEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n this.pressed = false;\n const {enable} = this.options;\n\n this.enableMoveEvent = enable;\n this.enableLeaveEvent = enable;\n this.enableEnterEvent = enable;\n this.enableOutEvent = enable;\n this.enableOverEvent = enable;\n\n this.events = (this.options.events || []).concat(MOUSE_EVENTS);\n\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === MOVE_EVENT_TYPE) {\n this.enableMoveEvent = enabled;\n }\n if (eventType === OVER_EVENT_TYPE) {\n this.enableOverEvent = enabled;\n }\n if (eventType === OUT_EVENT_TYPE) {\n this.enableOutEvent = enabled;\n }\n if (eventType === ENTER_EVENT_TYPE) {\n this.enableEnterEvent = enabled;\n }\n if (eventType === LEAVE_EVENT_TYPE) {\n this.enableLeaveEvent = enabled;\n }\n }\n\n handleEvent = (event: PointerEvent) => {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleEnterEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n };\n\n handleOverEvent(event: PointerEvent) {\n if (this.enableOverEvent) {\n if (event.type === 'mouseover') {\n this._emit(OVER_EVENT_TYPE, event);\n }\n }\n }\n\n handleOutEvent(event: PointerEvent) {\n if (this.enableOutEvent) {\n if (event.type === 'mouseout') {\n this._emit(OUT_EVENT_TYPE, event);\n }\n }\n }\n\n handleEnterEvent(event: PointerEvent) {\n if (this.enableEnterEvent) {\n if (event.type === 'mouseenter') {\n this._emit(ENTER_EVENT_TYPE, event);\n }\n }\n }\n\n handleLeaveEvent(event: PointerEvent) {\n if (this.enableLeaveEvent) {\n if (event.type === 'mouseleave') {\n this._emit(LEAVE_EVENT_TYPE, event);\n }\n }\n }\n\n handleMoveEvent(event: PointerEvent) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case 'mousedown':\n if (event.button >= 0) {\n // Button is down\n this.pressed = true;\n }\n break;\n case 'mousemove':\n // Move events use `bottons` to track the button being pressed\n if (event.buttons === 0) {\n // Button is not down\n this.pressed = false;\n }\n if (!this.pressed) {\n // Drag events are emitted by hammer already\n // we just need to emit the move event on hover\n this._emit(MOVE_EVENT_TYPE, event);\n }\n break;\n case 'mouseup':\n this.pressed = false;\n break;\n default:\n }\n }\n }\n\n _emit(\n type: 'pointermove' | 'pointerover' | 'pointerout' | 'pointerenter' | 'pointerleave',\n event: PointerEvent\n ) {\n this.callback({\n type,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n }\n}\n","import type {MjolnirKeyEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nimport {INPUT_EVENT_TYPES} from '../constants';\n\nconst {KEY_EVENTS} = INPUT_EVENT_TYPES;\nconst DOWN_EVENT_TYPE = 'keydown';\nconst UP_EVENT_TYPE = 'keyup';\n\ntype KeyInputOptions = InputOptions & {\n events?: string[];\n tabIndex?: number;\n};\n\nexport default class KeyInput extends Input {\n enableDownEvent: boolean;\n enableUpEvent: boolean;\n\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirKeyEventRaw) => void,\n options: KeyInputOptions\n ) {\n super(element, callback, options);\n\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n\n this.events = (this.options.events || []).concat(KEY_EVENTS);\n\n element.tabIndex = this.options.tabIndex || 0;\n element.style.outline = 'none';\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === DOWN_EVENT_TYPE) {\n this.enableDownEvent = enabled;\n }\n if (eventType === UP_EVENT_TYPE) {\n this.enableUpEvent = enabled;\n }\n }\n\n handleEvent = (event: KeyboardEvent) => {\n // Ignore if focused on text input\n const targetElement = (event.target || event.srcElement) as HTMLElement;\n if (\n (targetElement.tagName === 'INPUT' && (targetElement as HTMLInputElement).type === 'text') ||\n targetElement.tagName === 'TEXTAREA'\n ) {\n return;\n }\n\n if (this.enableDownEvent && event.type === 'keydown') {\n this.callback({\n type: DOWN_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target as HTMLElement\n });\n }\n\n if (this.enableUpEvent && event.type === 'keyup') {\n this.callback({\n type: UP_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target as HTMLElement\n });\n }\n };\n}\n","import type {MjolnirPointerEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nconst EVENT_TYPE = 'contextmenu';\n\nexport default class ContextmenuInput extends Input {\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirPointerEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n element.addEventListener('contextmenu', this.handleEvent);\n }\n\n destroy() {\n this.element.removeEventListener('contextmenu', this.handleEvent);\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n\n handleEvent = (event: MouseEvent) => {\n if (!this.options.enable) {\n return;\n }\n\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n };\n}\n","import type {MjolnirEventRaw, HammerInput, Point} from '../types';\n\n/* Constants */\nconst DOWN_EVENT = 1;\nconst MOVE_EVENT = 2;\nconst UP_EVENT = 4;\nconst MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\n\n// MouseEvent.button https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\nconst MOUSE_EVENT_BUTTON_LEFT = 0;\nconst MOUSE_EVENT_BUTTON_MIDDLE = 1;\nconst MOUSE_EVENT_BUTTON_RIGHT = 2;\n// MouseEvent.buttons https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\nconst MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nconst MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nconst MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\n\n/**\n * Extract the involved mouse button\n */\nexport function whichButtons(event: MjolnirEventRaw): {\n leftButton: boolean;\n middleButton: boolean;\n rightButton: boolean;\n} {\n const eventType = MOUSE_EVENTS[event.srcEvent.type];\n if (!eventType) {\n // Not a mouse evet\n return null;\n }\n\n const {buttons, button} = event.srcEvent as PointerEvent;\n let leftButton = false;\n let middleButton = false;\n let rightButton = false;\n\n if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n } else {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n\n return {leftButton, middleButton, rightButton};\n}\n\n/**\n * Calculate event position relative to the root element\n */\nexport function getOffsetPosition(\n event: MjolnirEventRaw,\n rootElement: HTMLElement\n): {\n center: Point;\n offsetCenter: Point;\n} {\n const center = (event as HammerInput).center;\n\n // `center` is a hammer.js event property\n if (!center) {\n // Not a gestural event\n return null;\n }\n\n const rect = rootElement.getBoundingClientRect();\n\n // Fix scale for map affected by a CSS transform.\n // See https://stackoverflow.com/a/26893663/3528533\n const scaleX = rect.width / rootElement.offsetWidth || 1;\n const scaleY = rect.height / rootElement.offsetHeight || 1;\n\n // Calculate center relative to the root element\n const offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n\n return {center, offsetCenter};\n}\n","import type EventManager from '../event-manager';\nimport {whichButtons, getOffsetPosition} from './event-utils';\nimport type {MjolnirEventRaw, MjolnirEventWrapper, MjolnirEvent} from '../types';\n\nexport type HandlerOptions = {\n srcElement?: 'root' | HTMLElement;\n priority?: number;\n};\n\ntype EventHandler = {\n type: string;\n handler: (event: MjolnirEvent) => void;\n once?: boolean;\n passive?: boolean;\n} & HandlerOptions;\n\nconst DEFAULT_OPTIONS: HandlerOptions = {\n srcElement: 'root',\n priority: 0\n};\n\nexport default class EventRegistrar {\n eventManager: EventManager;\n recognizerName: string;\n handlers: EventHandler[];\n handlersByElement: Map<'root' | HTMLElement, EventHandler[]>;\n _active: boolean;\n\n constructor(eventManager: EventManager) {\n this.eventManager = eventManager;\n this.handlers = [];\n // Element -> handler map\n this.handlersByElement = new Map();\n\n this._active = false;\n }\n\n // Returns true if there are no non-passive handlers\n isEmpty(): boolean {\n return !this._active;\n }\n\n add(\n type: string,\n handler: (event: MjolnirEvent) => void,\n options: HTMLElement | HandlerOptions,\n once: boolean = false,\n passive: boolean = false\n ) {\n const {handlers, handlersByElement} = this;\n let opts: HandlerOptions = DEFAULT_OPTIONS;\n\n if (typeof options === 'string' || (options && (options as HTMLElement).addEventListener)) {\n // is DOM element, backward compatibility\n // @ts-ignore\n opts = {...DEFAULT_OPTIONS, srcElement: options};\n } else if (options) {\n opts = {...DEFAULT_OPTIONS, ...options};\n }\n\n let entries = handlersByElement.get(opts.srcElement);\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n const entry: EventHandler = {\n type,\n handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n if (once) {\n entry.once = true;\n }\n if (passive) {\n entry.passive = true;\n }\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n\n // Sort handlers by descending priority\n // Handlers with the same priority are excuted in the order of registration\n let insertPosition = entries.length - 1;\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n insertPosition--;\n }\n entries.splice(insertPosition + 1, 0, entry);\n }\n\n remove(type: string, handler: (event: MjolnirEvent) => void) {\n const {handlers, handlersByElement} = this;\n\n for (let i = handlers.length - 1; i >= 0; i--) {\n const entry = handlers[i];\n\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n const entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n this._active = handlers.some(entry => !entry.passive);\n }\n\n /**\n * Handles hammerjs event\n */\n handleEvent = (event: MjolnirEventRaw) => {\n if (this.isEmpty()) {\n return;\n }\n\n const mjolnirEvent = this._normalizeEvent(event);\n let target = event.srcEvent.target as HTMLElement;\n\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n if (mjolnirEvent.handled) {\n return;\n }\n target = target.parentNode as HTMLElement;\n }\n this._emit(mjolnirEvent, 'root');\n };\n\n /**\n * Invoke handlers on a particular element\n */\n _emit(\n event: MjolnirEventWrapper,\n srcElement: 'root' | HTMLElement\n ) {\n const entries = this.handlersByElement.get(srcElement);\n\n if (entries) {\n let immediatePropagationStopped = false;\n\n // Prevents the current event from bubbling up\n const stopPropagation = () => {\n event.handled = true;\n };\n // Prevent any remaining listeners from being called\n const stopImmediatePropagation = () => {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n const entriesToRemove: EventHandler[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n const {type, handler, once} = entries[i];\n handler({\n ...event,\n // @ts-ignore\n type,\n stopPropagation,\n stopImmediatePropagation\n });\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n if (immediatePropagationStopped) {\n break;\n }\n }\n\n for (let i = 0; i < entriesToRemove.length; i++) {\n const {type, handler} = entriesToRemove[i];\n this.remove(type, handler);\n }\n }\n }\n\n /**\n * Normalizes hammerjs and custom events to have predictable fields.\n */\n _normalizeEvent(event: T): MjolnirEventWrapper {\n const rootElement = this.eventManager.getElement();\n\n return {\n ...event,\n ...whichButtons(event),\n ...getOffsetPosition(event, rootElement),\n preventDefault: () => {\n event.srcEvent.preventDefault();\n },\n stopImmediatePropagation: null,\n stopPropagation: null,\n handled: false,\n rootElement\n };\n }\n}\n","import {Manager} from './utils/hammer';\nimport type {\n HammerManager,\n HammerManagerConstructor,\n MjolnirEventRaw,\n MjolnirEvent,\n RecognizerOptions,\n RecognizerTuple,\n MjolnirEventHandlers\n} from './types';\n\nimport WheelInput from './inputs/wheel-input';\nimport MoveInput from './inputs/move-input';\nimport KeyInput from './inputs/key-input';\nimport ContextmenuInput from './inputs/contextmenu-input';\n\nimport EventRegistrar, {HandlerOptions} from './utils/event-registrar';\n\nimport {\n BASIC_EVENT_ALIASES,\n EVENT_RECOGNIZER_MAP,\n GESTURE_EVENT_ALIASES,\n RECOGNIZERS,\n RECOGNIZER_COMPATIBLE_MAP,\n RECOGNIZER_FALLBACK_MAP\n} from './constants';\n\nexport type EventManagerOptions = {\n events?: MjolnirEventHandlers;\n recognizers?: RecognizerTuple[];\n recognizerOptions?: {[type: string]: RecognizerOptions};\n Manager?: HammerManagerConstructor;\n touchAction?: string;\n tabIndex?: number;\n};\n\nconst DEFAULT_OPTIONS: EventManagerOptions = {\n // event handlers\n events: null,\n // custom recognizers\n recognizers: null,\n recognizerOptions: {},\n // Manager class\n Manager,\n // allow browser default touch action\n // https://github.com/uber/react-map-gl/issues/506\n touchAction: 'none',\n tabIndex: 0\n};\n\n// Unified API for subscribing to events about both\n// basic input events (e.g. 'mousemove', 'touchstart', 'wheel')\n// and gestural input (e.g. 'click', 'tap', 'panstart').\n// Delegates gesture related event registration and handling to Hammer.js.\nexport default class EventManager {\n private manager: HammerManager;\n private element: HTMLElement;\n private options: EventManagerOptions;\n private events: Map;\n\n // Custom handlers\n private wheelInput: WheelInput;\n private moveInput: MoveInput;\n private contextmenuInput: ContextmenuInput;\n private keyInput: KeyInput;\n\n constructor(element: HTMLElement = null, options: EventManagerOptions) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n this.events = new Map();\n\n this.setElement(element);\n\n // Register all passed events.\n const {events} = this.options;\n if (events) {\n this.on(events);\n }\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n setElement(element: HTMLElement): void {\n if (this.element) {\n // unregister all events\n this.destroy();\n }\n this.element = element;\n if (!element) {\n return;\n }\n\n const {options} = this;\n const ManagerClass = options.Manager;\n\n this.manager = new ManagerClass(element, {\n touchAction: options.touchAction,\n recognizers: options.recognizers || RECOGNIZERS\n }).on('hammer.input', this._onBasicInput);\n\n if (!options.recognizers) {\n // Set default recognize withs\n // http://hammerjs.github.io/recognize-with/\n Object.keys(RECOGNIZER_COMPATIBLE_MAP).forEach(name => {\n const recognizer = this.manager.get(name);\n if (recognizer) {\n RECOGNIZER_COMPATIBLE_MAP[name].forEach(otherName => {\n recognizer.recognizeWith(otherName);\n });\n }\n });\n }\n\n // Set recognizer options\n for (const recognizerName in options.recognizerOptions) {\n const recognizer = this.manager.get(recognizerName);\n if (recognizer) {\n const recognizerOption = options.recognizerOptions[recognizerName];\n // `enable` is managed by the event registrations\n delete recognizerOption.enable;\n recognizer.set(recognizerOption);\n }\n }\n\n // Handle events not handled by Hammer.js:\n // - mouse wheel\n // - pointer/touch/mouse move\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n\n // Register all existing events\n for (const [eventAlias, eventRegistrar] of this.events) {\n if (!eventRegistrar.isEmpty()) {\n // Enable recognizer for this event.\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n this.manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n }\n\n // Tear down internal event management implementations.\n destroy(): void {\n if (this.element) {\n // wheelInput etc. are created in setElement() and therefore\n // cannot exist if there is no element\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n\n this.wheelInput = null;\n this.moveInput = null;\n this.keyInput = null;\n this.contextmenuInput = null;\n this.manager = null;\n this.element = null;\n }\n }\n\n /** Register multiple event handlers */\n on(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n on(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n /** Register an event handler function to be called on `event` */\n on(event, handler, opts?: any) {\n this._addEventHandler(event, handler, opts, false);\n }\n\n /** Register an event handler function to be called on `event`, then remove it */\n once(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n once(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n once(event: any, handler: any, opts?: any) {\n this._addEventHandler(event, handler, opts, true);\n }\n\n /** Register an event handler function to be called on `event`\n * This handler does not ask the event to be recognized at all times.\n * Instead, it only \"intercepts\" the event if some other handler is getting it.\n */\n watch(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n watch(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n watch(event: any, handler: any, opts?: any) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n\n /**\n * Deregister a previously-registered event handler.\n */\n off(events: MjolnirEventHandlers): void;\n off(event: EventT['type'], handler: (event: EventT) => void): void;\n\n off(event: any, handler?: any) {\n this._removeEventHandler(event, handler);\n }\n\n /*\n * Enable/disable recognizer for the given event\n */\n private _toggleRecognizer(name: string, enabled: boolean): void {\n const {manager} = this;\n if (!manager) {\n return;\n }\n const recognizer = manager.get(name);\n // @ts-ignore\n if (recognizer && recognizer.options.enable !== enabled) {\n recognizer.set({enable: enabled});\n\n const fallbackRecognizers: string[] = RECOGNIZER_FALLBACK_MAP[name];\n if (fallbackRecognizers && !this.options.recognizers) {\n // Set default require failures\n // http://hammerjs.github.io/require-failure/\n fallbackRecognizers.forEach(otherName => {\n const otherRecognizer = manager.get(otherName);\n if (enabled) {\n // Wait for this recognizer to fail\n otherRecognizer.requireFailure(name);\n /**\n * This seems to be a bug in hammerjs:\n * requireFailure() adds both ways\n * dropRequireFailure() only drops one way\n * https://github.com/hammerjs/hammer.js/blob/master/src/recognizerjs/\n recognizer-constructor.js#L136\n */\n recognizer.dropRequireFailure(otherName);\n } else {\n // Do not wait for this recognizer to fail\n otherRecognizer.dropRequireFailure(name);\n }\n });\n }\n }\n this.wheelInput.enableEventType(name, enabled);\n this.moveInput.enableEventType(name, enabled);\n this.keyInput.enableEventType(name, enabled);\n this.contextmenuInput.enableEventType(name, enabled);\n }\n\n /**\n * Process the event registration for a single event + handler.\n */\n private _addEventHandler(\n event: string | MjolnirEventHandlers,\n handler: (event: MjolnirEvent) => void,\n opts?: HandlerOptions,\n once?: boolean,\n passive?: boolean\n ) {\n if (typeof event !== 'string') {\n // @ts-ignore\n opts = handler;\n // If `event` is a map, call `on()` for each entry.\n for (const eventName in event) {\n this._addEventHandler(eventName, event[eventName], opts, once, passive);\n }\n return;\n }\n\n const {manager, events} = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias: string = GESTURE_EVENT_ALIASES[event] || event;\n\n let eventRegistrar = events.get(eventAlias);\n if (!eventRegistrar) {\n eventRegistrar = new EventRegistrar(this);\n events.set(eventAlias, eventRegistrar);\n // Enable recognizer for this event.\n eventRegistrar.recognizerName = EVENT_RECOGNIZER_MAP[eventAlias] || eventAlias;\n // Listen to the event\n if (manager) {\n manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n eventRegistrar.add(event, handler, opts, once, passive);\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n\n /**\n * Process the event deregistration for a single event + handler.\n */\n private _removeEventHandler(\n event: string | MjolnirEventHandlers,\n handler?: (event: MjolnirEvent) => void\n ) {\n if (typeof event !== 'string') {\n // If `event` is a map, call `off()` for each entry.\n for (const eventName in event) {\n this._removeEventHandler(eventName, event[eventName]);\n }\n return;\n }\n\n const {events} = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n\n const eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n return;\n }\n\n eventRegistrar.remove(event, handler);\n\n if (eventRegistrar.isEmpty()) {\n const {recognizerName} = eventRegistrar;\n // Disable recognizer if no more handlers are attached to its events\n let isRecognizerUsed = false;\n for (const eh of events.values()) {\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n\n /**\n * Handle basic events using the 'hammer.input' Hammer.js API:\n * Before running Recognizers, Hammer emits a 'hammer.input' event\n * with the basic event info. This function emits all basic events\n * aliased to the \"class\" of event received.\n * See constants.BASIC_EVENT_CLASSES basic event class definitions.\n */\n private _onBasicInput = (event: MjolnirEventRaw) => {\n const {srcEvent} = event;\n const alias = BASIC_EVENT_ALIASES[srcEvent.type];\n if (alias) {\n // fire all events aliased to srcEvent.type\n this.manager.emit(alias, event);\n }\n };\n\n /**\n * Handle events not supported by Hammer.js,\n * and pipe back out through same (Hammer) channel used by other events.\n */\n private _onOtherEvent = (event: MjolnirEventRaw) => {\n // console.log('onotherevent', event.type, event)\n this.manager.emit(event.type, event);\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport LayerManager from \"./layer-manager.js\";\nimport ViewManager from \"./view-manager.js\";\nimport MapView from \"../views/map-view.js\";\nimport EffectManager from \"./effect-manager.js\";\nimport DeckRenderer from \"./deck-renderer.js\";\nimport DeckPicker from \"./deck-picker.js\";\nimport { WidgetManager } from \"./widget-manager.js\";\nimport Tooltip from \"./tooltip.js\";\nimport log from \"../utils/log.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport typedArrayManager from \"../utils/typed-array-manager.js\";\nimport { VERSION } from \"./init.js\";\nimport { luma } from '@luma.gl/core';\nimport { WebGLDevice } from '@luma.gl/webgl';\nimport { Timeline } from '@luma.gl/engine';\nimport { AnimationLoop } from '@luma.gl/engine';\nimport { GL } from '@luma.gl/constants';\nimport { Stats } from '@probe.gl/stats';\nimport { EventManager } from 'mjolnir.js';\nimport assert from \"../utils/assert.js\";\nimport { EVENTS } from \"./constants.js\";\n/* global document */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() { }\nconst getCursor = ({ isDragging }) => (isDragging ? 'grabbing' : 'grab');\nconst defaultProps = {\n id: '',\n width: '100%',\n height: '100%',\n style: null,\n viewState: null,\n initialViewState: null,\n pickingRadius: 0,\n layerFilter: null,\n parameters: {},\n parent: null,\n device: null,\n deviceProps: { type: 'webgl' },\n gl: null,\n glOptions: {},\n canvas: null,\n layers: [],\n effects: [],\n views: null,\n controller: null, // Rely on external controller, e.g. react-map-gl\n useDevicePixels: true,\n touchAction: 'none',\n eventRecognizerOptions: {},\n _framebuffer: null,\n _animate: false,\n _pickable: true,\n _typedArrayManagerProps: {},\n _customRender: null,\n widgets: [],\n onDeviceInitialized: noop,\n onWebGLInitialized: noop,\n onResize: noop,\n onViewStateChange: noop,\n onInteractionStateChange: noop,\n onBeforeRender: noop,\n onAfterRender: noop,\n onLoad: noop,\n onError: (error) => log.error(error.message, error.cause)(),\n onHover: null,\n onClick: null,\n onDragStart: null,\n onDrag: null,\n onDragEnd: null,\n _onMetrics: null,\n getCursor,\n getTooltip: null,\n debug: false,\n drawPickingColors: false\n};\n/* eslint-disable max-statements */\nexport default class Deck {\n static { this.defaultProps = defaultProps; }\n // This is used to defeat tree shaking of init.js\n // https://github.com/visgl/deck.gl/issues/3213\n static { this.VERSION = VERSION; }\n constructor(props) {\n this.width = 0;\n this.height = 0;\n // Allows attaching arbitrary data to the instance\n this.userData = {};\n this.device = null;\n this.canvas = null;\n this.viewManager = null;\n this.layerManager = null;\n this.effectManager = null;\n this.deckRenderer = null;\n this.deckPicker = null;\n this.eventManager = null;\n this.widgetManager = null;\n this.tooltip = null;\n this.animationLoop = null;\n this.cursorState = {\n isHovering: false,\n isDragging: false\n };\n this.stats = new Stats({ id: 'deck.gl' });\n this.metrics = {\n fps: 0,\n setPropsTime: 0,\n updateAttributesTime: 0,\n framesRedrawn: 0,\n pickTime: 0,\n pickCount: 0,\n gpuTime: 0,\n gpuTimePerFrame: 0,\n cpuTime: 0,\n cpuTimePerFrame: 0,\n bufferMemory: 0,\n textureMemory: 0,\n renderbufferMemory: 0,\n gpuMemory: 0\n };\n this._metricsCounter = 0;\n this._needsRedraw = 'Initial render';\n this._pickRequest = {\n mode: 'hover',\n x: -1,\n y: -1,\n radius: 0,\n event: null\n };\n /**\n * Pick and store the object under the pointer on `pointerdown`.\n * This object is reused for subsequent `onClick` and `onDrag*` callbacks.\n */\n this._lastPointerDownInfo = null;\n // The `pointermove` event may fire multiple times in between two animation frames,\n // it's a waste of time to run picking without rerender. Instead we save the last pick\n // request and only do it once on the next animation frame.\n /** Internal use only: event handler for pointerdown */\n this._onPointerMove = (event) => {\n const { _pickRequest } = this;\n if (event.type === 'pointerleave') {\n _pickRequest.x = -1;\n _pickRequest.y = -1;\n _pickRequest.radius = 0;\n }\n else if (event.leftButton || event.rightButton) {\n // Do not trigger onHover callbacks if mouse button is down.\n return;\n }\n else {\n const pos = event.offsetCenter;\n // Do not trigger callbacks when click/hover position is invalid. Doing so will cause a\n // assertion error when attempting to unproject the position.\n if (!pos) {\n return;\n }\n _pickRequest.x = pos.x;\n _pickRequest.y = pos.y;\n _pickRequest.radius = this.props.pickingRadius;\n }\n if (this.layerManager) {\n this.layerManager.context.mousePosition = { x: _pickRequest.x, y: _pickRequest.y };\n }\n _pickRequest.event = event;\n };\n /** Internal use only: event handler for click & drag */\n this._onEvent = (event) => {\n const eventOptions = EVENTS[event.type];\n const pos = event.offsetCenter;\n if (!eventOptions || !pos || !this.layerManager) {\n return;\n }\n // Reuse last picked object\n const layers = this.layerManager.getLayers();\n const info = this.deckPicker.getLastPickedObject({\n x: pos.x,\n y: pos.y,\n layers,\n viewports: this.getViewports(pos)\n }, this._lastPointerDownInfo);\n const { layer } = info;\n const layerHandler = layer && (layer[eventOptions.handler] || layer.props[eventOptions.handler]);\n const rootHandler = this.props[eventOptions.handler];\n let handled = false;\n if (layerHandler) {\n handled = layerHandler.call(layer, info, event);\n }\n if (!handled) {\n rootHandler?.(info, event);\n this.widgetManager.onEvent(info, event);\n }\n };\n /** Internal use only: evnet handler for pointerdown */\n this._onPointerDown = (event) => {\n const pos = event.offsetCenter;\n const pickedInfo = this._pick('pickObject', 'pickObject Time', {\n x: pos.x,\n y: pos.y,\n radius: this.props.pickingRadius\n });\n this._lastPointerDownInfo = pickedInfo.result[0] || pickedInfo.emptyInfo;\n };\n // @ts-ignore views\n this.props = { ...defaultProps, ...props };\n props = this.props;\n if (props.viewState && props.initialViewState) {\n log.warn('View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.')();\n }\n this.viewState = this.props.initialViewState;\n // See if we already have a device\n if (props.device) {\n this.device = props.device;\n }\n else if (props.gl) {\n if (props.gl instanceof WebGLRenderingContext) {\n log.error('WebGL1 context not supported.')();\n }\n this.device = WebGLDevice.attach(props.gl);\n }\n let deviceOrPromise = this.device;\n if (!deviceOrPromise) {\n // TODO v9 should we install WebGL backend as default for now?\n luma.registerDevices([WebGLDevice]);\n deviceOrPromise = luma.createDevice({\n ...props.deviceProps,\n canvas: this._createCanvas(props)\n });\n }\n this.animationLoop = this._createAnimationLoop(deviceOrPromise, props);\n this.setProps(props);\n // UNSAFE/experimental prop: only set at initialization to avoid performance hit\n if (props._typedArrayManagerProps) {\n typedArrayManager.setOptions(props._typedArrayManagerProps);\n }\n this.animationLoop.start();\n }\n /** Stop rendering and dispose all resources */\n finalize() {\n this.animationLoop?.stop();\n this.animationLoop?.destroy();\n this.animationLoop = null;\n this._lastPointerDownInfo = null;\n this.layerManager?.finalize();\n this.layerManager = null;\n this.viewManager?.finalize();\n this.viewManager = null;\n this.effectManager?.finalize();\n this.effectManager = null;\n this.deckRenderer?.finalize();\n this.deckRenderer = null;\n this.deckPicker?.finalize();\n this.deckPicker = null;\n this.eventManager?.destroy();\n this.eventManager = null;\n this.widgetManager?.finalize();\n this.widgetManager = null;\n if (!this.props.canvas && !this.props.device && !this.props.gl && this.canvas) {\n // remove internally created canvas\n this.canvas.parentElement?.removeChild(this.canvas);\n this.canvas = null;\n }\n }\n /** Partially update props */\n setProps(props) {\n this.stats.get('setProps Time').timeStart();\n if ('onLayerHover' in props) {\n log.removed('onLayerHover', 'onHover')();\n }\n if ('onLayerClick' in props) {\n log.removed('onLayerClick', 'onClick')();\n }\n if (props.initialViewState &&\n // depth = 3 when comparing viewStates: viewId.position.0\n !deepEqual(this.props.initialViewState, props.initialViewState, 3)) {\n // Overwrite internal view state\n this.viewState = props.initialViewState;\n }\n // Merge with existing props\n Object.assign(this.props, props);\n // Update CSS size of canvas\n this._setCanvasSize(this.props);\n // We need to overwrite CSS style width and height with actual, numeric values\n const resolvedProps = Object.create(this.props);\n Object.assign(resolvedProps, {\n views: this._getViews(),\n width: this.width,\n height: this.height,\n viewState: this._getViewState()\n });\n // Update the animation loop\n this.animationLoop?.setProps(resolvedProps);\n // If initialized, update sub manager props\n if (this.layerManager) {\n this.viewManager.setProps(resolvedProps);\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager.activateViewport(this.getViewports()[0]);\n this.layerManager.setProps(resolvedProps);\n this.effectManager.setProps(resolvedProps);\n this.deckRenderer.setProps(resolvedProps);\n this.deckPicker.setProps(resolvedProps);\n this.widgetManager.setProps(resolvedProps);\n }\n this.stats.get('setProps Time').timeEnd();\n }\n // Public API\n /**\n * Check if a redraw is needed\n * @returns `false` or a string summarizing the redraw reason\n */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n if (!this.layerManager) {\n // Not initialized or already finalized\n return false;\n }\n if (this.props._animate) {\n return 'Deck._animate';\n }\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n const viewManagerNeedsRedraw = this.viewManager.needsRedraw(opts);\n const layerManagerNeedsRedraw = this.layerManager.needsRedraw(opts);\n const effectManagerNeedsRedraw = this.effectManager.needsRedraw(opts);\n const deckRendererNeedsRedraw = this.deckRenderer.needsRedraw(opts);\n redraw =\n redraw ||\n viewManagerNeedsRedraw ||\n layerManagerNeedsRedraw ||\n effectManagerNeedsRedraw ||\n deckRendererNeedsRedraw;\n return redraw;\n }\n /**\n * Redraw the GL context\n * @param reason If not provided, only redraw if deemed necessary. Otherwise redraw regardless of internal states.\n * @returns\n */\n redraw(reason) {\n if (!this.layerManager) {\n // Not yet initialized\n return;\n }\n // Check if we need to redraw\n let redrawReason = this.needsRedraw({ clearRedrawFlags: true });\n // User-supplied should take precedent, however the redraw flags get cleared regardless\n redrawReason = reason || redrawReason;\n if (!redrawReason) {\n return;\n }\n this.stats.get('Redraw Count').incrementCount();\n if (this.props._customRender) {\n this.props._customRender(redrawReason);\n }\n else {\n this._drawLayers(redrawReason);\n }\n }\n /** Flag indicating that the Deck instance has initialized its resources and it's safe to call public methods. */\n get isInitialized() {\n return this.viewManager !== null;\n }\n /** Get a list of views that are currently rendered */\n getViews() {\n assert(this.viewManager);\n return this.viewManager.views;\n }\n /** Get a list of viewports that are currently rendered.\n * @param rect If provided, only returns viewports within the given bounding box.\n */\n getViewports(rect) {\n assert(this.viewManager);\n return this.viewManager.getViewports(rect);\n }\n /** Get the current canvas element. */\n getCanvas() {\n return this.canvas;\n }\n /** Query the object rendered on top at a given point */\n pickObject(opts) {\n const infos = this._pick('pickObject', 'pickObject Time', opts).result;\n return infos.length ? infos[0] : null;\n }\n /* Query all rendered objects at a given point */\n pickMultipleObjects(opts) {\n opts.depth = opts.depth || 10;\n return this._pick('pickObject', 'pickMultipleObjects Time', opts).result;\n }\n /* Query all objects rendered on top within a bounding box */\n pickObjects(opts) {\n return this._pick('pickObjects', 'pickObjects Time', opts);\n }\n /** Experimental\n * Add a global resource for sharing among layers\n */\n _addResources(resources, forceUpdate = false) {\n for (const id in resources) {\n this.layerManager.resourceManager.add({ resourceId: id, data: resources[id], forceUpdate });\n }\n }\n /** Experimental\n * Remove a global resource\n */\n _removeResources(resourceIds) {\n for (const id of resourceIds) {\n this.layerManager.resourceManager.remove(id);\n }\n }\n /** Experimental\n * Register a default effect. Effects will be sorted by order, those with a low order will be rendered first\n */\n _addDefaultEffect(effect) {\n this.effectManager.addDefaultEffect(effect);\n }\n _addDefaultShaderModule(module) {\n this.layerManager.addDefaultShaderModule(module);\n }\n _removeDefaultShaderModule(module) {\n this.layerManager?.removeDefaultShaderModule(module);\n }\n _pick(method, statKey, opts) {\n assert(this.deckPicker);\n const { stats } = this;\n stats.get('Pick Count').incrementCount();\n stats.get(statKey).timeStart();\n const infos = this.deckPicker[method]({\n // layerManager, viewManager and effectManager are always defined if deckPicker is\n layers: this.layerManager.getLayers(opts),\n views: this.viewManager.getViews(),\n viewports: this.getViewports(opts),\n onViewportActive: this.layerManager.activateViewport,\n effects: this.effectManager.getEffects(),\n ...opts\n });\n stats.get(statKey).timeEnd();\n return infos;\n }\n /** Resolve props.canvas to element */\n _createCanvas(props) {\n let canvas = props.canvas;\n // TODO EventManager should accept element id\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n assert(canvas);\n }\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = props.id || 'deckgl-overlay';\n const parent = props.parent || document.body;\n parent.appendChild(canvas);\n }\n Object.assign(canvas.style, props.style);\n return canvas;\n }\n /** Updates canvas width and/or height, if provided as props */\n _setCanvasSize(props) {\n if (!this.canvas) {\n return;\n }\n const { width, height } = props;\n // Set size ONLY if props are being provided, otherwise let canvas be layouted freely\n if (width || width === 0) {\n const cssWidth = Number.isFinite(width) ? `${width}px` : width;\n this.canvas.style.width = cssWidth;\n }\n if (height || height === 0) {\n const cssHeight = Number.isFinite(height) ? `${height}px` : height;\n // Note: position==='absolute' required for height 100% to work\n this.canvas.style.position = props.style?.position || 'absolute';\n this.canvas.style.height = cssHeight;\n }\n }\n /** If canvas size has changed, reads out the new size and update */\n _updateCanvasSize() {\n const { canvas } = this;\n if (!canvas) {\n return;\n }\n // Fallback to width/height when clientWidth/clientHeight are undefined (OffscreenCanvas).\n const newWidth = canvas.clientWidth ?? canvas.width;\n const newHeight = canvas.clientHeight ?? canvas.height;\n if (newWidth !== this.width || newHeight !== this.height) {\n // @ts-expect-error private assign to read-only property\n this.width = newWidth;\n // @ts-expect-error private assign to read-only property\n this.height = newHeight;\n this.viewManager?.setProps({ width: newWidth, height: newHeight });\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager?.activateViewport(this.getViewports()[0]);\n this.props.onResize({ width: newWidth, height: newHeight });\n }\n }\n _createAnimationLoop(deviceOrPromise, props) {\n const { \n // width,\n // height,\n gl, \n // deviceProps,\n // glOptions,\n // debug,\n onError, \n // onBeforeRender,\n // onAfterRender,\n useDevicePixels } = props;\n return new AnimationLoop({\n device: deviceOrPromise,\n useDevicePixels,\n // TODO v9\n autoResizeDrawingBuffer: !gl, // do not auto resize external context\n autoResizeViewport: false,\n // @ts-expect-error luma.gl needs to accept Promise return value\n onInitialize: context => this._setDevice(context.device),\n onRender: this._onRenderFrame.bind(this),\n // @ts-expect-error typing mismatch: AnimationLoop does not accept onError:null\n onError\n // onBeforeRender,\n // onAfterRender,\n });\n }\n // Get the most relevant view state: props.viewState, if supplied, shadows internal viewState\n // TODO: For backwards compatibility ensure numeric width and height is added to the viewState\n _getViewState() {\n return this.props.viewState || this.viewState;\n }\n // Get the view descriptor list\n _getViews() {\n const { views } = this.props;\n const normalizedViews = Array.isArray(views)\n ? views\n : // If null, default to a full screen map view port\n views\n ? [views]\n : [new MapView({ id: 'default-view' })];\n if (normalizedViews.length && this.props.controller) {\n // Backward compatibility: support controller prop\n normalizedViews[0].props.controller = this.props.controller;\n }\n return normalizedViews;\n }\n _onContextLost() {\n const { onError } = this.props;\n if (this.animationLoop && onError) {\n onError(new Error('WebGL context is lost'));\n }\n }\n /** Actually run picking */\n _pickAndCallback() {\n const { _pickRequest } = this;\n if (_pickRequest.event) {\n // Perform picking\n const { result, emptyInfo } = this._pick('pickObject', 'pickObject Time', _pickRequest);\n this.cursorState.isHovering = result.length > 0;\n // There are 4 possible scenarios:\n // result is [outInfo, pickedInfo] (moved from one pickable layer to another)\n // result is [outInfo] (moved outside of a pickable layer)\n // result is [pickedInfo] (moved into or over a pickable layer)\n // result is [] (nothing is or was picked)\n //\n // `layer.props.onHover` should be called on all affected layers (out/over)\n // `deck.props.onHover` should be called with the picked info if any, or empty info otherwise\n // `deck.props.getTooltip` should be called with the picked info if any, or empty info otherwise\n // Execute callbacks\n let pickedInfo = emptyInfo;\n let handled = false;\n for (const info of result) {\n pickedInfo = info;\n handled = info.layer?.onHover(info, _pickRequest.event) || handled;\n }\n if (!handled) {\n this.props.onHover?.(pickedInfo, _pickRequest.event);\n this.widgetManager.onHover(pickedInfo, _pickRequest.event);\n }\n // Clear pending pickRequest\n _pickRequest.event = null;\n }\n }\n _updateCursor() {\n const container = this.props.parent || this.canvas;\n if (container) {\n container.style.cursor = this.props.getCursor(this.cursorState);\n }\n }\n _setDevice(device) {\n this.device = device;\n if (!this.animationLoop) {\n // finalize() has been called\n return;\n }\n // if external context...\n if (!this.canvas) {\n this.canvas = this.device.canvasContext?.canvas;\n // TODO v9\n // ts-expect-error - Currently luma.gl v9 does not expose these options\n // All WebGLDevice contexts are instrumented, but it seems the device\n // should have a method to start state tracking even if not enabled?\n // instrumentGLContext(this.device.gl, {enable: true, copyState: true});\n }\n this.device.setParametersWebGL({\n blend: true,\n blendFunc: [770, 771, 1, 771],\n polygonOffsetFill: true,\n depthTest: true,\n depthFunc: 515\n });\n this.props.onDeviceInitialized(this.device);\n if (this.device instanceof WebGLDevice) {\n // Legacy callback - warn?\n this.props.onWebGLInitialized(this.device.gl);\n }\n // timeline for transitions\n const timeline = new Timeline();\n timeline.play();\n this.animationLoop.attachTimeline(timeline);\n this.eventManager = new EventManager(this.props.parent || this.canvas, {\n touchAction: this.props.touchAction,\n recognizerOptions: this.props.eventRecognizerOptions,\n events: {\n pointerdown: this._onPointerDown,\n pointermove: this._onPointerMove,\n pointerleave: this._onPointerMove\n }\n });\n for (const eventType in EVENTS) {\n this.eventManager.on(eventType, this._onEvent);\n }\n this.viewManager = new ViewManager({\n timeline,\n eventManager: this.eventManager,\n onViewStateChange: this._onViewStateChange.bind(this),\n onInteractionStateChange: this._onInteractionStateChange.bind(this),\n views: this._getViews(),\n viewState: this._getViewState(),\n width: this.width,\n height: this.height\n });\n // viewManager must be initialized before layerManager\n // layerManager depends on viewport created by viewManager.\n const viewport = this.viewManager.getViewports()[0];\n // Note: avoid React setState due GL animation loop / setState timing issue\n this.layerManager = new LayerManager(this.device, {\n deck: this,\n stats: this.stats,\n viewport,\n timeline\n });\n this.effectManager = new EffectManager({\n deck: this,\n device: this.device\n });\n this.deckRenderer = new DeckRenderer(this.device);\n this.deckPicker = new DeckPicker(this.device);\n this.widgetManager = new WidgetManager({\n deck: this,\n parentElement: this.canvas?.parentElement\n });\n this.widgetManager.addDefault(new Tooltip());\n this.setProps(this.props);\n this._updateCanvasSize();\n this.props.onLoad();\n }\n /** Internal only: default render function (redraw all layers and views) */\n _drawLayers(redrawReason, renderOptions) {\n const { device, gl } = this.layerManager.context;\n this.props.onBeforeRender({ device, gl });\n const opts = {\n target: this.props._framebuffer,\n layers: this.layerManager.getLayers(),\n viewports: this.viewManager.getViewports(),\n onViewportActive: this.layerManager.activateViewport,\n views: this.viewManager.getViews(),\n pass: 'screen',\n effects: this.effectManager.getEffects(),\n ...renderOptions\n };\n this.deckRenderer?.renderLayers(opts);\n if (opts.pass === 'screen') {\n // This method could be called when drawing to picking buffer, texture etc.\n // Only when drawing to screen, update all widgets (UI components)\n this.widgetManager.onRedraw({\n viewports: opts.viewports,\n layers: opts.layers\n });\n }\n this.props.onAfterRender({ device, gl });\n }\n // Callbacks\n _onRenderFrame() {\n this._getFrameStats();\n // Log perf stats every second\n if (this._metricsCounter++ % 60 === 0) {\n this._getMetrics();\n this.stats.reset();\n log.table(4, this.metrics)();\n // Experimental: report metrics\n if (this.props._onMetrics) {\n this.props._onMetrics(this.metrics);\n }\n }\n this._updateCanvasSize();\n this._updateCursor();\n // Update layers if needed (e.g. some async prop has loaded)\n // Note: This can trigger a redraw\n this.layerManager.updateLayers();\n // Perform picking request if any\n this._pickAndCallback();\n // Redraw if necessary\n this.redraw();\n // Update viewport transition if needed\n // Note: this can trigger `onViewStateChange`, and affect layers\n // We want to defer these changes to the next frame\n if (this.viewManager) {\n this.viewManager.updateViewStates();\n }\n }\n // Callbacks\n _onViewStateChange(params) {\n // Let app know that view state is changing, and give it a chance to change it\n const viewState = this.props.onViewStateChange(params) || params.viewState;\n // If initialViewState was set on creation, auto track position\n if (this.viewState) {\n this.viewState = { ...this.viewState, [params.viewId]: viewState };\n if (!this.props.viewState) {\n // Apply internal view state\n if (this.viewManager) {\n this.viewManager.setProps({ viewState: this.viewState });\n }\n }\n }\n }\n _onInteractionStateChange(interactionState) {\n this.cursorState.isDragging = interactionState.isDragging || false;\n this.props.onInteractionStateChange(interactionState);\n }\n _getFrameStats() {\n const { stats } = this;\n stats.get('frameRate').timeEnd();\n stats.get('frameRate').timeStart();\n // Get individual stats from luma.gl so reset works\n const animationLoopStats = this.animationLoop.stats;\n stats.get('GPU Time').addTime(animationLoopStats.get('GPU Time').lastTiming);\n stats.get('CPU Time').addTime(animationLoopStats.get('CPU Time').lastTiming);\n }\n _getMetrics() {\n const { metrics, stats } = this;\n metrics.fps = stats.get('frameRate').getHz();\n metrics.setPropsTime = stats.get('setProps Time').time;\n metrics.updateAttributesTime = stats.get('Update Attributes').time;\n metrics.framesRedrawn = stats.get('Redraw Count').count;\n metrics.pickTime =\n stats.get('pickObject Time').time +\n stats.get('pickMultipleObjects Time').time +\n stats.get('pickObjects Time').time;\n metrics.pickCount = stats.get('Pick Count').count;\n // Luma stats\n metrics.gpuTime = stats.get('GPU Time').time;\n metrics.cpuTime = stats.get('CPU Time').time;\n metrics.gpuTimePerFrame = stats.get('GPU Time').getAverageTime();\n metrics.cpuTimePerFrame = stats.get('CPU Time').getAverageTime();\n const memoryStats = luma.stats.get('Memory Usage');\n metrics.bufferMemory = memoryStats.get('Buffer Memory').count;\n metrics.textureMemory = memoryStats.get('Texture Memory').count;\n metrics.renderbufferMemory = memoryStats.get('Renderbuffer Memory').count;\n metrics.gpuMemory = memoryStats.get('GPU Memory').count;\n }\n}\n","// From https://github.com/streamich/react-use/blob/master/src/useIsomorphicLayoutEffect.ts\n// useLayoutEffect but does not trigger warning in server-side rendering\nimport { useEffect, useLayoutEffect } from 'react';\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;\n","// Check if one JavaScript class inherits from another\nexport function inheritsFrom(Type, ParentType) {\n while (Type) {\n if (Type === ParentType) {\n return true;\n }\n Type = Object.getPrototypeOf(Type);\n }\n return false;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function getDataTypeFromTypedArray(arrayOrType) {\n const type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n switch (type) {\n case Float32Array:\n return 'float32';\n case Uint16Array:\n return 'uint16';\n case Uint32Array:\n return 'uint32';\n case Uint8Array:\n case Uint8ClampedArray:\n return 'uint8';\n case Int8Array:\n return 'sint8';\n case Int16Array:\n return 'sint16';\n case Int32Array:\n return 'sint32';\n default:\n // Failed to deduce data type from typed array\n throw new Error(type.constructor.name);\n }\n}\nexport function getTypedArrayFromDataType(dataType) {\n switch (dataType) {\n case 'float32':\n return Float32Array;\n case 'uint32':\n return Uint32Array;\n case 'sint32':\n return Int32Array;\n case 'uint16':\n case 'unorm16':\n return Uint16Array;\n case 'sint16':\n case 'snorm16':\n return Int16Array;\n case 'uint8':\n case 'unorm8':\n return Uint8Array;\n case 'sint8':\n case 'snorm8':\n return Int8Array;\n default:\n // Failed to deduce typed array from data type\n throw new Error(dataType);\n }\n}\n/** Get the vertex format for an attribute with TypedArray and size */\nexport function getVertexFormatFromAttribute(typedArray, size, normalized) {\n if (!size || size > 4) {\n throw new Error(`size ${size}`);\n }\n const components = size;\n let dataType = getDataTypeFromTypedArray(typedArray);\n if (dataType === 'uint8' || dataType === 'sint8') {\n if (components === 1 || components === 3) {\n // WebGPU 8 bit formats must be aligned to 16 bit boundaries');\n throw new Error(`size: ${size}`);\n }\n if (normalized) {\n dataType = dataType.replace('int', 'norm');\n }\n return `${dataType}x${components}`;\n }\n if (dataType === 'uint16' || dataType === 'sint16') {\n if (components === 1 || components === 3) {\n // WebGPU 16 bit formats must be aligned to 32 bit boundaries\n throw new Error(`size: ${size}`);\n }\n if (normalized) {\n dataType = dataType.replace('int', 'norm');\n }\n return `${dataType}x${components}`;\n }\n if (components === 1) {\n return dataType;\n }\n return `${dataType}x${components}`;\n}\n","import { getTypedArrayFromDataType, getDataTypeFromTypedArray } from '@luma.gl/core';\nexport function typedArrayFromDataType(type) {\n // Sorted in some order of likelihood to reduce amount of comparisons\n switch (type) {\n case 'float64':\n return Float64Array;\n case 'uint8':\n case 'unorm8':\n return Uint8ClampedArray;\n default:\n return getTypedArrayFromDataType(type);\n }\n}\nexport const dataTypeFromTypedArray = getDataTypeFromTypedArray;\nexport function getBufferAttributeLayout(name, accessor) {\n return {\n attribute: name,\n // @ts-expect-error Not all combinations are valid vertex formats; it's up to DataColumn to ensure\n format: accessor.size > 1\n ? `${accessor.type}x${accessor.size}`\n : accessor.type,\n byteOffset: accessor.offset || 0\n // Note stride is set on the top level\n };\n}\nexport function getStride(accessor) {\n return accessor.stride || accessor.size * accessor.bytesPerElement;\n}\nexport function bufferLayoutEqual(accessor1, accessor2) {\n return (accessor1.type === accessor2.type &&\n accessor1.size === accessor2.size &&\n getStride(accessor1) === getStride(accessor2) &&\n (accessor1.offset || 0) === (accessor2.offset || 0));\n}\n","import { Buffer } from '@luma.gl/core';\nimport { typedArrayFromDataType, getBufferAttributeLayout, getStride, dataTypeFromTypedArray } from \"./gl-utils.js\";\nimport typedArrayManager from \"../../utils/typed-array-manager.js\";\nimport { toDoublePrecisionArray } from \"../../utils/math-utils.js\";\nimport log from \"../../utils/log.js\";\nfunction resolveShaderAttribute(baseAccessor, shaderAttributeOptions) {\n if (shaderAttributeOptions.offset) {\n log.removed('shaderAttribute.offset', 'vertexOffset, elementOffset')();\n }\n // All shader attributes share the parent's stride\n const stride = getStride(baseAccessor);\n // `vertexOffset` is used to access the neighboring vertex's value\n // e.g. `nextPositions` in polygon\n const vertexOffset = shaderAttributeOptions.vertexOffset !== undefined\n ? shaderAttributeOptions.vertexOffset\n : baseAccessor.vertexOffset || 0;\n // `elementOffset` is defined when shader attribute's size is smaller than the parent's\n // e.g. `translations` in transform matrix\n const elementOffset = shaderAttributeOptions.elementOffset || 0;\n const offset = \n // offsets defined by the attribute\n vertexOffset * stride +\n elementOffset * baseAccessor.bytesPerElement +\n // offsets defined by external buffers if any\n (baseAccessor.offset || 0);\n return {\n ...shaderAttributeOptions,\n offset,\n stride\n };\n}\nfunction resolveDoublePrecisionShaderAttributes(baseAccessor, shaderAttributeOptions) {\n const resolvedOptions = resolveShaderAttribute(baseAccessor, shaderAttributeOptions);\n return {\n high: resolvedOptions,\n low: {\n ...resolvedOptions,\n offset: resolvedOptions.offset + baseAccessor.size * 4\n }\n };\n}\nexport default class DataColumn {\n /* eslint-disable max-statements */\n constructor(device, opts, state) {\n this._buffer = null;\n this.device = device;\n this.id = opts.id || '';\n this.size = opts.size || 1;\n const logicalType = opts.logicalType || opts.type;\n const doublePrecision = logicalType === 'float64';\n let { defaultValue } = opts;\n defaultValue = Number.isFinite(defaultValue)\n ? [defaultValue]\n : defaultValue || new Array(this.size).fill(0);\n let bufferType;\n if (doublePrecision) {\n bufferType = 'float32';\n }\n else if (!logicalType && opts.isIndexed) {\n bufferType = 'uint32';\n }\n else {\n bufferType = logicalType || 'float32';\n }\n // This is the attribute type defined by the layer\n // If an external buffer is provided, this.type may be overwritten\n // But we always want to use defaultType for allocation\n let defaultType = typedArrayFromDataType(logicalType || bufferType);\n this.doublePrecision = doublePrecision;\n // `fp64: false` tells a double-precision attribute to allocate Float32Arrays\n // by default when using auto-packing. This is more efficient in use cases where\n // high precision is unnecessary, but the `64Low` attribute is still required\n // by the shader.\n if (doublePrecision && opts.fp64 === false) {\n defaultType = Float32Array;\n }\n this.value = null;\n this.settings = {\n ...opts,\n defaultType,\n defaultValue: defaultValue,\n logicalType,\n type: bufferType,\n normalized: bufferType.includes('norm'),\n size: this.size,\n bytesPerElement: defaultType.BYTES_PER_ELEMENT\n };\n this.state = {\n ...state,\n externalBuffer: null,\n bufferAccessor: this.settings,\n allocatedValue: null,\n numInstances: 0,\n bounds: null,\n constant: false\n };\n }\n /* eslint-enable max-statements */\n get isConstant() {\n return this.state.constant;\n }\n get buffer() {\n return this._buffer;\n }\n get byteOffset() {\n const accessor = this.getAccessor();\n if (accessor.vertexOffset) {\n return accessor.vertexOffset * getStride(accessor);\n }\n return 0;\n }\n get numInstances() {\n return this.state.numInstances;\n }\n set numInstances(n) {\n this.state.numInstances = n;\n }\n delete() {\n if (this._buffer) {\n this._buffer.delete();\n this._buffer = null;\n }\n typedArrayManager.release(this.state.allocatedValue);\n }\n getBuffer() {\n if (this.state.constant) {\n return null;\n }\n return this.state.externalBuffer || this._buffer;\n }\n getValue(attributeName = this.id, options = null) {\n const result = {};\n if (this.state.constant) {\n const value = this.value;\n if (options) {\n const shaderAttributeDef = resolveShaderAttribute(this.getAccessor(), options);\n const offset = shaderAttributeDef.offset / value.BYTES_PER_ELEMENT;\n const size = shaderAttributeDef.size || this.size;\n result[attributeName] = value.subarray(offset, offset + size);\n }\n else {\n result[attributeName] = value;\n }\n }\n else {\n result[attributeName] = this.getBuffer();\n }\n if (this.doublePrecision) {\n if (this.value instanceof Float64Array) {\n result[`${attributeName}64Low`] = result[attributeName];\n }\n else {\n // Disable fp64 low part\n result[`${attributeName}64Low`] = new Float32Array(this.size);\n }\n }\n return result;\n }\n _getBufferLayout(attributeName = this.id, options = null) {\n const accessor = this.getAccessor();\n const attributes = [];\n const result = {\n name: this.id,\n byteStride: getStride(accessor),\n attributes\n };\n if (this.doublePrecision) {\n const doubleShaderAttributeDefs = resolveDoublePrecisionShaderAttributes(accessor, options || {});\n attributes.push(getBufferAttributeLayout(attributeName, { ...accessor, ...doubleShaderAttributeDefs.high }), getBufferAttributeLayout(`${attributeName}64Low`, {\n ...accessor,\n ...doubleShaderAttributeDefs.low\n }));\n }\n else if (options) {\n const shaderAttributeDef = resolveShaderAttribute(accessor, options);\n attributes.push(getBufferAttributeLayout(attributeName, { ...accessor, ...shaderAttributeDef }));\n }\n else {\n attributes.push(getBufferAttributeLayout(attributeName, accessor));\n }\n return result;\n }\n setAccessor(accessor) {\n this.state.bufferAccessor = accessor;\n }\n getAccessor() {\n return this.state.bufferAccessor;\n }\n // Returns [min: Array(size), max: Array(size)]\n /* eslint-disable max-depth */\n getBounds() {\n if (this.state.bounds) {\n return this.state.bounds;\n }\n let result = null;\n if (this.state.constant && this.value) {\n const min = Array.from(this.value);\n result = [min, min];\n }\n else {\n const { value, numInstances, size } = this;\n const len = numInstances * size;\n if (value && len && value.length >= len) {\n const min = new Array(size).fill(Infinity);\n const max = new Array(size).fill(-Infinity);\n for (let i = 0; i < len;) {\n for (let j = 0; j < size; j++) {\n const v = value[i++];\n if (v < min[j])\n min[j] = v;\n if (v > max[j])\n max[j] = v;\n }\n }\n result = [min, max];\n }\n }\n this.state.bounds = result;\n return result;\n }\n // returns true if success\n // eslint-disable-next-line max-statements\n setData(data) {\n const { state } = this;\n let opts;\n if (ArrayBuffer.isView(data)) {\n opts = { value: data };\n }\n else if (data instanceof Buffer) {\n opts = { buffer: data };\n }\n else {\n opts = data;\n }\n const accessor = { ...this.settings, ...opts };\n if (ArrayBuffer.isView(opts.value)) {\n if (!opts.type) {\n // Deduce data type\n const is64Bit = this.doublePrecision && opts.value instanceof Float64Array;\n if (is64Bit) {\n accessor.type = 'float32';\n }\n else {\n const type = dataTypeFromTypedArray(opts.value);\n accessor.type = accessor.normalized ? type.replace('int', 'norm') : type;\n }\n }\n accessor.bytesPerElement = opts.value.BYTES_PER_ELEMENT;\n accessor.stride = getStride(accessor);\n }\n state.bounds = null; // clear cached bounds\n if (opts.constant) {\n // set constant\n let value = opts.value;\n value = this._normalizeValue(value, [], 0);\n if (this.settings.normalized) {\n value = this.normalizeConstant(value);\n }\n const hasChanged = !state.constant || !this._areValuesEqual(value, this.value);\n if (!hasChanged) {\n return false;\n }\n state.externalBuffer = null;\n state.constant = true;\n this.value = ArrayBuffer.isView(value) ? value : new Float32Array(value);\n }\n else if (opts.buffer) {\n const buffer = opts.buffer;\n state.externalBuffer = buffer;\n state.constant = false;\n this.value = opts.value || null;\n }\n else if (opts.value) {\n this._checkExternalBuffer(opts);\n let value = opts.value;\n state.externalBuffer = null;\n state.constant = false;\n this.value = value;\n let { buffer } = this;\n const stride = getStride(accessor);\n const byteOffset = (accessor.vertexOffset || 0) * stride;\n if (this.doublePrecision && value instanceof Float64Array) {\n value = toDoublePrecisionArray(value, accessor);\n }\n if (this.settings.isIndexed) {\n const ArrayType = this.settings.defaultType;\n if (value.constructor !== ArrayType) {\n // Cast the index buffer to expected type\n value = new ArrayType(value);\n }\n }\n // A small over allocation is used as safety margin\n // Shader attributes may try to access this buffer with bigger offsets\n const requiredBufferSize = value.byteLength + byteOffset + stride * 2;\n if (!buffer || buffer.byteLength < requiredBufferSize) {\n buffer = this._createBuffer(requiredBufferSize);\n }\n buffer.write(value, byteOffset);\n }\n this.setAccessor(accessor);\n return true;\n }\n updateSubBuffer(opts = {}) {\n this.state.bounds = null; // clear cached bounds\n const value = this.value;\n const { startOffset = 0, endOffset } = opts;\n this.buffer.write(this.doublePrecision && value instanceof Float64Array\n ? toDoublePrecisionArray(value, {\n size: this.size,\n startIndex: startOffset,\n endIndex: endOffset\n })\n : value.subarray(startOffset, endOffset), startOffset * value.BYTES_PER_ELEMENT + this.byteOffset);\n }\n allocate(numInstances, copy = false) {\n const { state } = this;\n const oldValue = state.allocatedValue;\n // Allocate at least one element to ensure a valid buffer\n const value = typedArrayManager.allocate(oldValue, numInstances + 1, {\n size: this.size,\n type: this.settings.defaultType,\n copy\n });\n this.value = value;\n const { byteOffset } = this;\n let { buffer } = this;\n if (!buffer || buffer.byteLength < value.byteLength + byteOffset) {\n buffer = this._createBuffer(value.byteLength + byteOffset);\n if (copy && oldValue) {\n // Upload the full existing attribute value to the GPU, so that updateBuffer\n // can choose to only update a partial range.\n // TODO - copy old buffer to new buffer on the GPU\n buffer.write(oldValue instanceof Float64Array ? toDoublePrecisionArray(oldValue, this) : oldValue, byteOffset);\n }\n }\n state.allocatedValue = value;\n state.constant = false;\n state.externalBuffer = null;\n this.setAccessor(this.settings);\n return true;\n }\n // PRIVATE HELPER METHODS\n _checkExternalBuffer(opts) {\n const { value } = opts;\n if (!ArrayBuffer.isView(value)) {\n throw new Error(`Attribute ${this.id} value is not TypedArray`);\n }\n const ArrayType = this.settings.defaultType;\n let illegalArrayType = false;\n if (this.doublePrecision) {\n // not 32bit or 64bit\n illegalArrayType = value.BYTES_PER_ELEMENT < 4;\n }\n if (illegalArrayType) {\n throw new Error(`Attribute ${this.id} does not support ${value.constructor.name}`);\n }\n if (!(value instanceof ArrayType) && this.settings.normalized && !('normalized' in opts)) {\n log.warn(`Attribute ${this.id} is normalized`)();\n }\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\n normalizeConstant(value) {\n /* eslint-disable complexity */\n switch (this.settings.type) {\n case 'snorm8':\n // normalize [-128, 127] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 128) / 255) * 2 - 1);\n case 'snorm16':\n // normalize [-32768, 32767] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 32768) / 65535) * 2 - 1);\n case 'unorm8':\n // normalize [0, 255] to [0, 1]\n return new Float32Array(value).map(x => x / 255);\n case 'unorm16':\n // normalize [0, 65535] to [0, 1]\n return new Float32Array(value).map(x => x / 65535);\n default:\n // No normalization for gl.FLOAT and gl.HALF_FLOAT\n return value;\n }\n }\n /* check user supplied values and apply fallback */\n _normalizeValue(value, out, start) {\n const { defaultValue, size } = this.settings;\n if (Number.isFinite(value)) {\n out[start] = value;\n return out;\n }\n if (!value) {\n let i = size;\n while (--i >= 0) {\n out[start + i] = defaultValue[i];\n }\n return out;\n }\n // Important - switch cases are 5x more performant than a for loop!\n /* eslint-disable no-fallthrough, default-case */\n switch (size) {\n case 4:\n out[start + 3] = Number.isFinite(value[3]) ? value[3] : defaultValue[3];\n case 3:\n out[start + 2] = Number.isFinite(value[2]) ? value[2] : defaultValue[2];\n case 2:\n out[start + 1] = Number.isFinite(value[1]) ? value[1] : defaultValue[1];\n case 1:\n out[start + 0] = Number.isFinite(value[0]) ? value[0] : defaultValue[0];\n break;\n default:\n // In the rare case where the attribute size > 4, do it the slow way\n // This is used for e.g. transform matrices\n let i = size;\n while (--i >= 0) {\n out[start + i] = Number.isFinite(value[i]) ? value[i] : defaultValue[i];\n }\n }\n return out;\n }\n _areValuesEqual(value1, value2) {\n if (!value1 || !value2) {\n return false;\n }\n const { size } = this;\n for (let i = 0; i < size; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n _createBuffer(byteLength) {\n if (this._buffer) {\n this._buffer.destroy();\n }\n const { isIndexed, type } = this.settings;\n this._buffer = this.device.createBuffer({\n ...this._buffer?.props,\n id: this.id,\n usage: isIndexed ? Buffer.INDEX : Buffer.VERTEX,\n indexType: isIndexed ? type : undefined,\n byteLength\n });\n return this._buffer;\n }\n}\n","const EMPTY_ARRAY = [];\nconst placeholderArray = [];\n/*\n * Create an Iterable\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n * and a \"context\" tracker from the given data\n */\nexport function createIterable(data, startRow = 0, endRow = Infinity) {\n let iterable = EMPTY_ARRAY;\n const objectInfo = {\n index: -1,\n data,\n // visitor can optionally utilize this to avoid constructing a new array for every object\n target: []\n };\n if (!data) {\n iterable = EMPTY_ARRAY;\n }\n else if (typeof data[Symbol.iterator] === 'function') {\n // data is already an iterable\n iterable = data;\n }\n else if (data.length > 0) {\n placeholderArray.length = data.length;\n iterable = placeholderArray;\n }\n if (startRow > 0 || Number.isFinite(endRow)) {\n iterable = (Array.isArray(iterable) ? iterable : Array.from(iterable)).slice(startRow, endRow);\n objectInfo.index = startRow - 1;\n }\n return { iterable, objectInfo };\n}\n/*\n * Returns true if data is an async iterable object\n */\nexport function isAsyncIterable(data) {\n return data && data[Symbol.asyncIterator];\n}\n/*\n * Create an accessor function from a flat buffer that yields the value at each object index\n */\nexport function getAccessorFromBuffer(typedArray, options) {\n const { size, stride, offset, startIndices, nested } = options;\n const bytesPerElement = typedArray.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : size;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const vertexCount = Math.floor((typedArray.length - elementOffset) / elementStride);\n return (_, { index, target }) => {\n if (!startIndices) {\n const sourceIndex = index * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n return target;\n }\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || vertexCount;\n let result;\n if (nested) {\n result = new Array(endIndex - startIndex);\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n target = new Array(size);\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n result[i - startIndex] = target;\n }\n }\n else if (elementStride === size) {\n result = typedArray.subarray(startIndex * size + elementOffset, endIndex * size + elementOffset);\n }\n else {\n result = new typedArray.constructor((endIndex - startIndex) * size);\n let targetIndex = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n result[targetIndex++] = typedArray[sourceIndex + j];\n }\n }\n }\n return result;\n };\n}\n","/*\n * range (Array)\n * + start (Number) - the start index (incl.)\n * + end (Number) - the end index (excl.)\n * rangeList (Array) - array of sorted, combined ranges\n */\nexport const EMPTY = [];\nexport const FULL = [[0, Infinity]];\n// Insert a range into a range collection\nexport function add(rangeList, range) {\n // Noop if range collection already covers all\n if (rangeList === FULL) {\n return rangeList;\n }\n // Validate the input range\n if (range[0] < 0) {\n range[0] = 0;\n }\n if (range[0] >= range[1]) {\n return rangeList;\n }\n // TODO - split off to tree-shakable Range class\n const newRangeList = [];\n const len = rangeList.length;\n let insertPosition = 0;\n for (let i = 0; i < len; i++) {\n const range0 = rangeList[i];\n if (range0[1] < range[0]) {\n // the current range is to the left of the new range\n newRangeList.push(range0);\n insertPosition = i + 1;\n }\n else if (range0[0] > range[1]) {\n // the current range is to the right of the new range\n newRangeList.push(range0);\n }\n else {\n range = [Math.min(range0[0], range[0]), Math.max(range0[1], range[1])];\n }\n }\n newRangeList.splice(insertPosition, 0, range);\n return newRangeList;\n}\n","const DEFAULT_TRANSITION_SETTINGS = {\n interpolation: {\n duration: 0,\n easing: t => t\n },\n spring: {\n stiffness: 0.05,\n damping: 0.5\n }\n};\nexport function normalizeTransitionSettings(userSettings, layerSettings) {\n if (!userSettings) {\n return null;\n }\n if (Number.isFinite(userSettings)) {\n userSettings = { type: 'interpolation', duration: userSettings };\n }\n const type = userSettings.type || 'interpolation';\n return {\n ...DEFAULT_TRANSITION_SETTINGS[type],\n ...layerSettings,\n ...userSettings,\n type\n };\n}\n","/* eslint-disable complexity */\nimport DataColumn from \"./data-column.js\";\nimport assert from \"../../utils/assert.js\";\nimport { createIterable, getAccessorFromBuffer } from \"../../utils/iterable-utils.js\";\nimport { fillArray } from \"../../utils/flatten.js\";\nimport * as range from \"../../utils/range.js\";\nimport { bufferLayoutEqual } from \"./gl-utils.js\";\nimport { normalizeTransitionSettings } from \"./transition-settings.js\";\nexport default class Attribute extends DataColumn {\n constructor(device, opts) {\n super(device, opts, {\n startIndices: null,\n lastExternalBuffer: null,\n binaryValue: null,\n binaryAccessor: null,\n needsUpdate: true,\n needsRedraw: false,\n layoutChanged: false,\n updateRanges: range.FULL\n });\n /** Legacy approach to set attribute value - read `isConstant` instead for attribute state */\n this.constant = false;\n // eslint-disable-next-line\n this.settings.update = opts.update || (opts.accessor ? this._autoUpdater : undefined);\n Object.seal(this.settings);\n Object.seal(this.state);\n // Check all fields and generate helpful error messages\n this._validateAttributeUpdaters();\n }\n get startIndices() {\n return this.state.startIndices;\n }\n set startIndices(layout) {\n this.state.startIndices = layout;\n }\n needsUpdate() {\n return this.state.needsUpdate;\n }\n needsRedraw({ clearChangedFlags = false } = {}) {\n const needsRedraw = this.state.needsRedraw;\n this.state.needsRedraw = needsRedraw && !clearChangedFlags;\n return needsRedraw;\n }\n layoutChanged() {\n return this.state.layoutChanged;\n }\n setAccessor(accessor) {\n this.state.layoutChanged ||= !bufferLayoutEqual(accessor, this.getAccessor());\n super.setAccessor(accessor);\n }\n getUpdateTriggers() {\n const { accessor } = this.settings;\n // Backards compatibility: allow attribute name to be used as update trigger key\n return [this.id].concat((typeof accessor !== 'function' && accessor) || []);\n }\n supportsTransition() {\n return Boolean(this.settings.transition);\n }\n // Resolve transition settings object if transition is enabled, otherwise `null`\n getTransitionSetting(opts) {\n if (!opts || !this.supportsTransition()) {\n return null;\n }\n const { accessor } = this.settings;\n // TODO: have the layer resolve these transition settings itself?\n const layerSettings = this.settings.transition;\n // these are the transition settings passed in by the user\n const userSettings = Array.isArray(accessor)\n ? // @ts-ignore\n opts[accessor.find(a => opts[a])]\n : // @ts-ignore\n opts[accessor];\n // Shorthand: use duration instead of parameter object\n return normalizeTransitionSettings(userSettings, layerSettings);\n }\n setNeedsUpdate(reason = this.id, dataRange) {\n this.state.needsUpdate = this.state.needsUpdate || reason;\n this.setNeedsRedraw(reason);\n if (dataRange) {\n const { startRow = 0, endRow = Infinity } = dataRange;\n this.state.updateRanges = range.add(this.state.updateRanges, [startRow, endRow]);\n }\n else {\n this.state.updateRanges = range.FULL;\n }\n }\n clearNeedsUpdate() {\n this.state.needsUpdate = false;\n this.state.updateRanges = range.EMPTY;\n }\n setNeedsRedraw(reason = this.id) {\n this.state.needsRedraw = this.state.needsRedraw || reason;\n }\n allocate(numInstances) {\n const { state, settings } = this;\n if (settings.noAlloc) {\n // Data is provided through a Buffer object.\n return false;\n }\n if (settings.update) {\n super.allocate(numInstances, state.updateRanges !== range.FULL);\n return true;\n }\n return false;\n }\n updateBuffer({ numInstances, data, props, context }) {\n if (!this.needsUpdate()) {\n return false;\n }\n const { state: { updateRanges }, settings: { update, noAlloc } } = this;\n let updated = true;\n if (update) {\n // Custom updater - typically for non-instanced layers\n for (const [startRow, endRow] of updateRanges) {\n update.call(context, this, { data, startRow, endRow, props, numInstances });\n }\n if (!this.value) {\n // no value was assigned during update\n }\n else if (this.constant ||\n !this.buffer ||\n this.buffer.byteLength < this.value.byteLength + this.byteOffset) {\n this.setData({\n value: this.value,\n constant: this.constant\n });\n // Setting attribute.constant in updater is a legacy approach that interferes with allocation in the next cycle\n // Respect it here but reset after use\n this.constant = false;\n }\n else {\n for (const [startRow, endRow] of updateRanges) {\n const startOffset = Number.isFinite(startRow) ? this.getVertexOffset(startRow) : 0;\n const endOffset = Number.isFinite(endRow)\n ? this.getVertexOffset(endRow)\n : noAlloc || !Number.isFinite(numInstances)\n ? this.value.length\n : numInstances * this.size;\n super.updateSubBuffer({ startOffset, endOffset });\n }\n }\n this._checkAttributeArray();\n }\n else {\n updated = false;\n }\n this.clearNeedsUpdate();\n this.setNeedsRedraw();\n return updated;\n }\n // Use generic value\n // Returns true if successful\n setConstantValue(value) {\n if (value === undefined || typeof value === 'function') {\n return false;\n }\n const hasChanged = this.setData({ constant: true, value });\n if (hasChanged) {\n this.setNeedsRedraw();\n }\n this.clearNeedsUpdate();\n return true;\n }\n // Use external buffer\n // Returns true if successful\n // eslint-disable-next-line max-statements\n setExternalBuffer(buffer) {\n const { state } = this;\n if (!buffer) {\n state.lastExternalBuffer = null;\n return false;\n }\n this.clearNeedsUpdate();\n if (state.lastExternalBuffer === buffer) {\n return true;\n }\n state.lastExternalBuffer = buffer;\n this.setNeedsRedraw();\n this.setData(buffer);\n return true;\n }\n // Binary value is a typed array packed from mapping the source data with the accessor\n // If the returned value from the accessor is the same as the attribute value, set it directly\n // Otherwise use the auto updater for transform/normalization\n setBinaryValue(buffer, startIndices = null) {\n const { state, settings } = this;\n if (!buffer) {\n state.binaryValue = null;\n state.binaryAccessor = null;\n return false;\n }\n if (settings.noAlloc) {\n // Let the layer handle this\n return false;\n }\n if (state.binaryValue === buffer) {\n this.clearNeedsUpdate();\n return true;\n }\n state.binaryValue = buffer;\n this.setNeedsRedraw();\n const needsUpdate = settings.transform || startIndices !== this.startIndices;\n if (needsUpdate) {\n if (ArrayBuffer.isView(buffer)) {\n buffer = { value: buffer };\n }\n const binaryValue = buffer;\n assert(ArrayBuffer.isView(binaryValue.value), `invalid ${settings.accessor}`);\n const needsNormalize = Boolean(binaryValue.size) && binaryValue.size !== this.size;\n state.binaryAccessor = getAccessorFromBuffer(binaryValue.value, {\n size: binaryValue.size || this.size,\n stride: binaryValue.stride,\n offset: binaryValue.offset,\n startIndices: startIndices,\n nested: needsNormalize\n });\n // Fall through to auto updater\n return false;\n }\n this.clearNeedsUpdate();\n this.setData(buffer);\n return true;\n }\n getVertexOffset(row) {\n const { startIndices } = this;\n const vertexIndex = startIndices\n ? row < startIndices.length\n ? startIndices[row]\n : this.numInstances\n : row;\n return vertexIndex * this.size;\n }\n getValue() {\n const shaderAttributeDefs = this.settings.shaderAttributes;\n const result = super.getValue();\n if (!shaderAttributeDefs) {\n return result;\n }\n for (const shaderAttributeName in shaderAttributeDefs) {\n Object.assign(result, super.getValue(shaderAttributeName, shaderAttributeDefs[shaderAttributeName]));\n }\n return result;\n }\n /** Generate WebGPU-style buffer layout descriptor from this attribute */\n getBufferLayout(\n /** A luma.gl Model-shaped object that supplies additional hint to attribute resolution */\n modelInfo) {\n // Clear change flag\n this.state.layoutChanged = false;\n const shaderAttributeDefs = this.settings.shaderAttributes;\n const result = super._getBufferLayout();\n const { stepMode } = this.settings;\n if (stepMode === 'dynamic') {\n // If model info is provided, use isInstanced flag to determine step mode\n // If no model info is provided, assume it's an instanced model (most common use case)\n result.stepMode = modelInfo ? (modelInfo.isInstanced ? 'instance' : 'vertex') : 'instance';\n }\n else {\n result.stepMode = stepMode ?? 'vertex';\n }\n if (!shaderAttributeDefs) {\n return result;\n }\n for (const shaderAttributeName in shaderAttributeDefs) {\n const map = super._getBufferLayout(shaderAttributeName, shaderAttributeDefs[shaderAttributeName]);\n // @ts-ignore\n result.attributes.push(...map.attributes);\n }\n return result;\n }\n /* eslint-disable max-depth, max-statements */\n _autoUpdater(attribute, { data, startRow, endRow, props, numInstances }) {\n if (attribute.constant) {\n return;\n }\n const { settings, state, value, size, startIndices } = attribute;\n const { accessor, transform } = settings;\n const accessorFunc = state.binaryAccessor ||\n // @ts-ignore\n (typeof accessor === 'function' ? accessor : props[accessor]);\n assert(typeof accessorFunc === 'function', `accessor \"${accessor}\" is not a function`);\n let i = attribute.getVertexOffset(startRow);\n const { iterable, objectInfo } = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let objectValue = accessorFunc(object, objectInfo);\n if (transform) {\n // transform callbacks could be bound to a particular layer instance.\n // always point `this` to the current layer.\n objectValue = transform.call(this, objectValue);\n }\n if (startIndices) {\n const numVertices = (objectInfo.index < startIndices.length - 1\n ? startIndices[objectInfo.index + 1]\n : numInstances) - startIndices[objectInfo.index];\n if (objectValue && Array.isArray(objectValue[0])) {\n let startIndex = i;\n for (const item of objectValue) {\n attribute._normalizeValue(item, value, startIndex);\n startIndex += size;\n }\n }\n else if (objectValue && objectValue.length > size) {\n value.set(objectValue, i);\n }\n else {\n attribute._normalizeValue(objectValue, objectInfo.target, 0);\n fillArray({\n target: value,\n source: objectInfo.target,\n start: i,\n count: numVertices\n });\n }\n i += numVertices * size;\n }\n else {\n attribute._normalizeValue(objectValue, value, i);\n i += size;\n }\n }\n }\n /* eslint-enable max-depth, max-statements */\n // Validate deck.gl level fields\n _validateAttributeUpdaters() {\n const { settings } = this;\n // Check that 'update' is a valid function\n const hasUpdater = settings.noAlloc || typeof settings.update === 'function';\n if (!hasUpdater) {\n throw new Error(`Attribute ${this.id} missing update or accessor`);\n }\n }\n // check that the first few elements of the attribute are reasonable\n /* eslint-disable no-fallthrough */\n _checkAttributeArray() {\n const { value } = this;\n const limit = Math.min(4, this.size);\n if (value && value.length >= limit) {\n let valid = true;\n switch (limit) {\n case 4:\n valid = valid && Number.isFinite(value[3]);\n case 3:\n valid = valid && Number.isFinite(value[2]);\n case 2:\n valid = valid && Number.isFinite(value[1]);\n case 1:\n valid = valid && Number.isFinite(value[0]);\n break;\n default:\n valid = false;\n }\n if (!valid) {\n throw new Error(`Illegal attribute generated for ${this.id}`);\n }\n }\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"./highlight.js\";\nconst FS_GLES = `\\\nout vec4 transform_output;\nvoid main() {\ntransform_output = vec4(0);\n}`;\nconst FS300 = `#version 300 es\\n${FS_GLES}`;\n// Prase given glsl line and return qualifier details or null\nexport function getQualifierDetails(line, qualifiers) {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n // TODO add support for precession qualifiers (highp, mediump and lowp)\n const [qualifier, type, definition] = words;\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n const name = definition.split(';')[0];\n return { qualifier, type, name };\n}\n/**\n * Given the shader input and output variable names,\n * builds and return a pass through fragment shader.\n */\nexport function getPassthroughFS(options) {\n const { input, inputChannels, output } = options || {};\n if (!input) {\n // Default shader\n return FS300;\n }\n if (!inputChannels) {\n throw new Error('inputChannels');\n }\n const inputType = channelCountToType(inputChannels);\n const outputValue = convertToVec4(input, inputChannels);\n return `\\\n#version 300 es\nin ${inputType} ${input};\nout vec4 ${output};\nvoid main() {\n ${output} = ${outputValue};\n}`;\n}\n/** convert glsl type to suffix */\nexport function typeToChannelSuffix(type) {\n // prettier-ignore\n switch (type) {\n case 'float': return 'x';\n case 'vec2': return 'xy';\n case 'vec3': return 'xyz';\n case 'vec4': return 'xyzw';\n default:\n throw new Error(type);\n }\n}\n/** convert glsl type to channel count */\nexport function typeToChannelCount(type) {\n // prettier-ignore\n switch (type) {\n case 'float': return 1;\n case 'vec2': return 2;\n case 'vec3': return 3;\n case 'vec4': return 4;\n default:\n throw new Error(type);\n }\n}\nfunction channelCountToType(channels) {\n // prettier-ignore\n switch (channels) {\n case 1: return 'float';\n case 2: return 'vec2';\n case 3: return 'vec3';\n case 4: return 'vec4';\n default:\n throw new Error(`invalid channels: ${channels}`);\n }\n}\n/** Returns glsl instruction for converting to vec4 */\nexport function convertToVec4(variable, channels) {\n // prettier-ignore\n switch (channels) {\n case 1: return `vec4(${variable}, 0.0, 0.0, 1.0)`;\n case 2: return `vec4(${variable}, 0.0, 1.0)`;\n case 3: return `vec4(${variable}, 1.0)`;\n case 4: return variable;\n default:\n throw new Error(`invalid channels: ${channels}`);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { arrayEqual, arrayCopy } from \"../../utils/array-equal.js\";\n/**\n * A uniform block holds values of the of uniform values for one uniform block / buffer.\n * It also does some book keeping on what has changed, to minimize unnecessary writes to uniform buffers.\n */\nexport class UniformBlock {\n name;\n uniforms = {};\n modifiedUniforms = {};\n modified = true;\n bindingLayout = {};\n needsRedraw = 'initialized';\n constructor(props) {\n this.name = props?.name;\n // TODO - Extract uniform layout from the shaderLayout object\n if (props?.name && props?.shaderLayout) {\n const binding = props?.shaderLayout.bindings?.find(binding => binding.type === 'uniform' && binding.name === props?.name);\n if (!binding) {\n throw new Error(props?.name);\n }\n const uniformBlock = binding;\n for (const uniform of uniformBlock.uniforms || []) {\n this.bindingLayout[uniform.name] = uniform;\n }\n }\n }\n /** Set a map of uniforms */\n setUniforms(uniforms) {\n for (const [key, value] of Object.entries(uniforms)) {\n this._setUniform(key, value);\n if (!this.needsRedraw) {\n this.setNeedsRedraw(`${this.name}.${key}=${value}`);\n }\n }\n }\n setNeedsRedraw(reason) {\n this.needsRedraw = this.needsRedraw || reason;\n }\n /** Returns all uniforms */\n getAllUniforms() {\n // @ts-expect-error\n this.modifiedUniforms = {};\n this.needsRedraw = false;\n return (this.uniforms || {});\n }\n /** Set a single uniform */\n _setUniform(key, value) {\n if (arrayEqual(this.uniforms[key], value)) {\n return;\n }\n this.uniforms[key] = arrayCopy(value);\n this.modifiedUniforms[key] = true;\n this.modified = true;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isNumberArray } from \"./is-array.js\";\n/** Test if two arrays are deep equal, with a length limit that defaults to 16 */\nexport function arrayEqual(a, b, limit = 16) {\n if (a !== b) {\n return false;\n }\n const arrayA = isNumberArray(a);\n if (!arrayA) {\n return false;\n }\n const arrayB = isNumberArray(b);\n if (arrayB && arrayA.length === arrayB.length) {\n for (let i = 0; i < arrayA.length; ++i) {\n if (arrayB[i] !== arrayA[i]) {\n return false;\n }\n }\n }\n return true;\n}\n/** Copy a value */\nexport function arrayCopy(a) {\n const numberArray = isNumberArray(a);\n if (numberArray) {\n return numberArray.slice();\n }\n return a;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from \"../../utils/assert.js\";\nconst UNIFORM_FORMATS = {\n f32: { type: 'f32', components: 1 },\n i32: { type: 'i32', components: 1 },\n u32: { type: 'u32', components: 1 },\n // 'bool-webgl': {type: 'bool-webgl', components: 1},\n 'vec2': { type: 'f32', components: 2 },\n 'vec3': { type: 'f32', components: 3 },\n 'vec4': { type: 'f32', components: 4 },\n 'vec2': { type: 'i32', components: 2 },\n 'vec3': { type: 'i32', components: 3 },\n 'vec4': { type: 'i32', components: 4 },\n 'vec2': { type: 'u32', components: 2 },\n 'vec3': { type: 'u32', components: 3 },\n 'vec4': { type: 'u32', components: 4 },\n 'mat2x2': { type: 'f32', components: 4 },\n 'mat2x3': { type: 'f32', components: 6 },\n 'mat2x4': { type: 'f32', components: 8 },\n 'mat3x2': { type: 'f32', components: 6 },\n 'mat3x3': { type: 'f32', components: 9 },\n 'mat3x4': { type: 'f32', components: 12 },\n 'mat4x2': { type: 'f32', components: 8 },\n 'mat4x3': { type: 'f32', components: 12 },\n 'mat4x4': { type: 'f32', components: 16 }\n};\n/** Split a uniform type string into type and components */\nexport function decodeShaderUniformType(format) {\n const decoded = UNIFORM_FORMATS[format];\n assert(format);\n return decoded;\n}\n/** Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes) */\nexport function alignTo(size, count) {\n // prettier-ignore\n switch (count) {\n case 1: return size; // Pad upwards to even multiple of 2\n case 2: return size + (size % 2); // Pad upwards to even multiple of 2\n default: return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { decodeShaderUniformType, alignTo } from \"../../adapter/type-utils/decode-shader-types.js\";\nimport { getScratchArrayBuffer } from \"../../utils/array-utils-flat.js\";\nimport { isNumberArray } from \"../../utils/is-array.js\";\nimport { log } from \"../../utils/log.js\";\n/**\n * Smallest buffer size that can be used for uniform buffers.\n * TODO - does this depend on device?\n */\nconst minBufferSize = 1024;\n/**\n * Std140 layout for uniform buffers\n * Supports manual listing of uniforms\n */\nexport class UniformBufferLayout {\n layout = {};\n /** number of bytes needed for buffer allocation */\n byteLength;\n /** Create a new UniformBufferLayout given a map of attributes. */\n constructor(uniformTypes) {\n /** number of 4 byte slots taken */\n let size = 0;\n // Add layout (type, size and offset) definitions for each uniform in the layout\n for (const [key, uniformType] of Object.entries(uniformTypes)) {\n const typeAndComponents = decodeShaderUniformType(uniformType);\n const { type, components: count } = typeAndComponents;\n // First, align (bump) current offset to an even multiple of current object (1, 2, 4)\n size = alignTo(size, count);\n // Use the aligned size as the offset of the current uniform.\n const offset = size;\n // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset\n size += count;\n this.layout[key] = { type, size: count, offset };\n }\n size += (4 - (size % 4)) % 4;\n const actualByteLength = size * 4;\n this.byteLength = Math.max(actualByteLength, minBufferSize);\n }\n /** Get the data for the complete buffer */\n getData(uniformValues) {\n const bufferSize = Math.max(this.byteLength, minBufferSize);\n // Allocate three typed arrays pointing at same memory\n const arrayBuffer = getScratchArrayBuffer(bufferSize);\n const typedArrays = {\n i32: new Int32Array(arrayBuffer),\n u32: new Uint32Array(arrayBuffer),\n f32: new Float32Array(arrayBuffer),\n // TODO not implemented\n f16: new Uint16Array(arrayBuffer)\n };\n // TODO is this needed?\n // typedArrays.i32.fill(0);\n for (const [name, value] of Object.entries(uniformValues)) {\n const uniformLayout = this.layout[name];\n if (!uniformLayout) {\n log.warn(`Supplied uniform value ${name} not present in uniform block layout`)();\n // eslint-disable-next-line no-continue\n continue;\n }\n const { type, size, offset } = uniformLayout;\n const typedArray = typedArrays[type];\n if (size === 1) {\n if (typeof value !== 'number' && typeof value !== 'boolean') {\n log.warn(`Supplied value for single component uniform ${name} is not a number: ${value}`)();\n // eslint-disable-next-line no-continue\n continue;\n }\n // single value -> just set it\n typedArray[offset] = Number(value);\n }\n else {\n const numericArray = isNumberArray(value);\n if (!numericArray) {\n log.warn(`Supplied value for multi component / array uniform ${name} is not a numeric array: ${value}`)();\n // eslint-disable-next-line no-continue\n continue;\n }\n // vector/matrix -> copy the supplied (typed) array, starting from offset\n // TODO: we should limit or check size in case the supplied data overflows\n typedArray.set(numericArray, offset);\n }\n }\n return new Uint8Array(arrayBuffer);\n }\n /** Does this layout have a field with specified name */\n has(name) {\n return Boolean(this.layout[name]);\n }\n /** Get offset and size for a field with specified name */\n get(name) {\n const layout = this.layout[name];\n return layout;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer } from \"../../adapter/resources/buffer.js\";\nimport { UniformBlock } from \"./uniform-block.js\";\nimport { UniformBufferLayout } from \"./uniform-buffer-layout.js\";\nimport { log } from \"../../utils/log.js\";\n/**\n * A uniform store holds a uniform values for one or more uniform blocks,\n * - It can generate binary data for any uniform buffer\n * - It can manage a uniform buffer for each block\n * - It can update managed uniform buffers with a single call\n * - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.\n */\nexport class UniformStore {\n /** Stores the uniform values for each uniform block */\n uniformBlocks = new Map();\n /** Can generate data for a uniform buffer for each block from data */\n uniformBufferLayouts = new Map();\n /** Actual buffer for the blocks */\n uniformBuffers = new Map();\n /**\n * Create a new UniformStore instance\n * @param blocks\n */\n constructor(blocks) {\n for (const [bufferName, block] of Object.entries(blocks)) {\n const uniformBufferName = bufferName;\n // Create a layout object to help us generate correctly formatted binary uniform buffers\n const uniformBufferLayout = new UniformBufferLayout(block.uniformTypes || {});\n this.uniformBufferLayouts.set(uniformBufferName, uniformBufferLayout);\n // Create a Uniform block to store the uniforms for each buffer.\n const uniformBlock = new UniformBlock({ name: bufferName });\n uniformBlock.setUniforms(block.defaultUniforms || {});\n this.uniformBlocks.set(uniformBufferName, uniformBlock);\n }\n }\n /** Destroy any managed uniform buffers */\n destroy() {\n for (const uniformBuffer of this.uniformBuffers.values()) {\n uniformBuffer.destroy();\n }\n }\n /**\n * Set uniforms\n * Makes all properties partial\n */\n setUniforms(uniforms) {\n for (const [blockName, uniformValues] of Object.entries(uniforms)) {\n this.uniformBlocks.get(blockName).setUniforms(uniformValues);\n // We leverage logging in updateUniformBuffers(), even though slightly less efficient\n // this.updateUniformBuffer(blockName);\n }\n this.updateUniformBuffers();\n }\n /** Get the required minimum length of the uniform buffer */\n getUniformBufferByteLength(uniformBufferName) {\n return this.uniformBufferLayouts.get(uniformBufferName).byteLength;\n }\n /** Get formatted binary memory that can be uploaded to a buffer */\n getUniformBufferData(uniformBufferName) {\n const uniformValues = this.uniformBlocks.get(uniformBufferName).getAllUniforms();\n return this.uniformBufferLayouts.get(uniformBufferName).getData(uniformValues);\n }\n /**\n * Creates an unmanaged uniform buffer (umnanaged means that application is responsible for destroying it)\n * The new buffer is initialized with current / supplied values\n */\n createUniformBuffer(device, uniformBufferName, uniforms) {\n if (uniforms) {\n this.setUniforms(uniforms);\n }\n const byteLength = this.getUniformBufferByteLength(uniformBufferName);\n const uniformBuffer = device.createBuffer({\n usage: Buffer.UNIFORM | Buffer.COPY_DST,\n byteLength\n });\n // Note that this clears the needs redraw flag\n const uniformBufferData = this.getUniformBufferData(uniformBufferName);\n uniformBuffer.write(uniformBufferData);\n return uniformBuffer;\n }\n /** Get the managed uniform buffer. \"managed\" resources are destroyed when the uniformStore is destroyed. */\n getManagedUniformBuffer(device, uniformBufferName) {\n if (!this.uniformBuffers.get(uniformBufferName)) {\n const byteLength = this.getUniformBufferByteLength(uniformBufferName);\n const uniformBuffer = device.createBuffer({\n usage: Buffer.UNIFORM | Buffer.COPY_DST,\n byteLength\n });\n this.uniformBuffers.set(uniformBufferName, uniformBuffer);\n }\n // this.updateUniformBuffers();\n return this.uniformBuffers.get(uniformBufferName);\n }\n /** Updates all uniform buffers where values have changed */\n updateUniformBuffers() {\n let reason = false;\n for (const uniformBufferName of this.uniformBlocks.keys()) {\n const bufferReason = this.updateUniformBuffer(uniformBufferName);\n reason ||= bufferReason;\n }\n if (reason) {\n log.log(3, `UniformStore.updateUniformBuffers(): ${reason}`)();\n }\n return reason;\n }\n /** Update one uniform buffer. Only updates if values have changed */\n updateUniformBuffer(uniformBufferName) {\n const uniformBlock = this.uniformBlocks.get(uniformBufferName);\n const uniformBuffer = this.uniformBuffers.get(uniformBufferName);\n let reason = false;\n if (uniformBuffer && uniformBlock.needsRedraw) {\n reason ||= uniformBlock.needsRedraw;\n // This clears the needs redraw flag\n const uniformBufferData = this.getUniformBufferData(uniformBufferName);\n const uniformBuffer = this.uniformBuffers.get(uniformBufferName);\n uniformBuffer.write(uniformBufferData);\n // logging - TODO - don't query the values unnecessarily\n const uniformValues = this.uniformBlocks.get(uniformBufferName).getAllUniforms();\n log.log(4, `Writing to uniform buffer ${String(uniformBufferName)}`, uniformBufferData, uniformValues)();\n }\n return reason;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Fast partial deep equal for prop.\n *\n * @param a Prop\n * @param b Prop to compare against `a`\n * @param depth Depth to which to recurse in nested Objects/Arrays. Use 0 (default) for shallow comparison, -1 for infinite depth\n */\n/* eslint-disable complexity */\nexport function deepEqual(a, b, depth) {\n if (a === b) {\n return true;\n }\n if (!depth || !a || !b) {\n return false;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], depth - 1)) {\n return false;\n }\n }\n return true;\n }\n if (Array.isArray(b)) {\n return false;\n }\n if (typeof a === 'object' && typeof b === 'object') {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n if (!deepEqual(a[key], b[key], depth - 1)) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","// This file is copied from Brendan Duncan's https://github.com/brendan-duncan/wgsl_reflect\n// under MIT license.\n// @ts-nocheck\n/* eslint-disable */\nclass ParseContext {\n constructor() {\n this.constants = new Map();\n this.aliases = new Map();\n this.structs = new Map();\n }\n}\n/**\n * @class Node\n * @category AST\n * Base class for AST nodes parsed from a WGSL shader.\n */\nclass Node {\n constructor() { }\n get isAstNode() {\n return true;\n }\n get astNodeType() {\n return \"\";\n }\n evaluate(context) {\n throw new Error(\"Cannot evaluate node\");\n }\n evaluateString(context) {\n return this.evaluate(context).toString();\n }\n}\n/**\n * @class Statement\n * @extends Node\n * @category AST\n */\nclass Statement extends Node {\n constructor() {\n super();\n }\n}\n/**\n * @class Function\n * @extends Statement\n * @category AST\n */\nclass Function extends Statement {\n constructor(name, args, returnType, body) {\n super();\n this.name = name;\n this.args = args;\n this.returnType = returnType;\n this.body = body;\n }\n get astNodeType() {\n return \"function\";\n }\n}\n/**\n * @class StaticAssert\n * @extends Statement\n * @category AST\n */\nclass StaticAssert extends Statement {\n constructor(expression) {\n super();\n this.expression = expression;\n }\n get astNodeType() {\n return \"staticAssert\";\n }\n}\n/**\n * @class While\n * @extends Statement\n * @category AST\n */\nclass While extends Statement {\n constructor(condition, body) {\n super();\n this.condition = condition;\n this.body = body;\n }\n get astNodeType() {\n return \"while\";\n }\n}\n/**\n * @class Continuing\n * @extends Statement\n * @category AST\n */\nclass Continuing extends Statement {\n constructor(body) {\n super();\n this.body = body;\n }\n get astNodeType() {\n return \"continuing\";\n }\n}\n/**\n * @class For\n * @extends Statement\n * @category AST\n */\nclass For extends Statement {\n constructor(init, condition, increment, body) {\n super();\n this.init = init;\n this.condition = condition;\n this.increment = increment;\n this.body = body;\n }\n get astNodeType() {\n return \"for\";\n }\n}\n/**\n * @class Var\n * @extends Statement\n * @category AST\n */\nclass Var extends Statement {\n constructor(name, type, storage, access, value) {\n super();\n this.name = name;\n this.type = type;\n this.storage = storage;\n this.access = access;\n this.value = value;\n }\n get astNodeType() {\n return \"var\";\n }\n}\n/**\n * @class Override\n * @extends Statement\n * @category AST\n */\nclass Override extends Statement {\n constructor(name, type, value) {\n super();\n this.name = name;\n this.type = type;\n this.value = value;\n }\n get astNodeType() {\n return \"override\";\n }\n}\n/**\n * @class Let\n * @extends Statement\n * @category AST\n */\nclass Let extends Statement {\n constructor(name, type, storage, access, value) {\n super();\n this.name = name;\n this.type = type;\n this.storage = storage;\n this.access = access;\n this.value = value;\n }\n get astNodeType() {\n return \"let\";\n }\n}\n/**\n * @class Const\n * @extends Statement\n * @category AST\n */\nclass Const extends Statement {\n constructor(name, type, storage, access, value) {\n super();\n this.name = name;\n this.type = type;\n this.storage = storage;\n this.access = access;\n this.value = value;\n }\n get astNodeType() {\n return \"const\";\n }\n evaluate(context) {\n return this.value.evaluate(context);\n }\n}\nvar IncrementOperator;\n(function (IncrementOperator) {\n IncrementOperator[\"increment\"] = \"++\";\n IncrementOperator[\"decrement\"] = \"--\";\n})(IncrementOperator || (IncrementOperator = {}));\n(function (IncrementOperator) {\n function parse(val) {\n const key = val;\n if (key == \"parse\")\n throw new Error(\"Invalid value for IncrementOperator\");\n return IncrementOperator[key];\n }\n IncrementOperator.parse = parse;\n})(IncrementOperator || (IncrementOperator = {}));\n/**\n * @class Increment\n * @extends Statement\n * @category AST\n */\nclass Increment extends Statement {\n constructor(operator, variable) {\n super();\n this.operator = operator;\n this.variable = variable;\n }\n get astNodeType() {\n return \"increment\";\n }\n}\nvar AssignOperator;\n(function (AssignOperator) {\n AssignOperator[\"assign\"] = \"=\";\n AssignOperator[\"addAssign\"] = \"+=\";\n AssignOperator[\"subtractAssin\"] = \"-=\";\n AssignOperator[\"multiplyAssign\"] = \"*=\";\n AssignOperator[\"divideAssign\"] = \"/=\";\n AssignOperator[\"moduloAssign\"] = \"%=\";\n AssignOperator[\"andAssign\"] = \"&=\";\n AssignOperator[\"orAssign\"] = \"|=\";\n AssignOperator[\"xorAssign\"] = \"^=\";\n AssignOperator[\"shiftLeftAssign\"] = \"<<=\";\n AssignOperator[\"shiftRightAssign\"] = \">>=\";\n})(AssignOperator || (AssignOperator = {}));\n(function (AssignOperator) {\n function parse(val) {\n const key = val;\n if (key == \"parse\")\n throw new Error(\"Invalid value for AssignOperator\");\n return AssignOperator[key];\n }\n AssignOperator.parse = parse;\n})(AssignOperator || (AssignOperator = {}));\n/**\n * @class Assign\n * @extends Statement\n * @category AST\n */\nclass Assign extends Statement {\n constructor(operator, variable, value) {\n super();\n this.operator = operator;\n this.variable = variable;\n this.value = value;\n }\n get astNodeType() {\n return \"assign\";\n }\n}\n/**\n * @class Call\n * @extends Statement\n * @category AST\n */\nclass Call extends Statement {\n constructor(name, args) {\n super();\n this.name = name;\n this.args = args;\n }\n get astNodeType() {\n return \"call\";\n }\n}\n/**\n * @class Loop\n * @extends Statement\n * @category AST\n */\nclass Loop extends Statement {\n constructor(body, continuing) {\n super();\n this.body = body;\n this.continuing = continuing;\n }\n get astNodeType() {\n return \"loop\";\n }\n}\n/**\n * @class Switch\n * @extends Statement\n * @category AST\n */\nclass Switch extends Statement {\n constructor(condition, body) {\n super();\n this.condition = condition;\n this.body = body;\n }\n get astNodeType() {\n return \"body\";\n }\n}\n/**\n * @class If\n * @extends Statement\n * @category AST\n */\nclass If extends Statement {\n constructor(condition, body, elseif, _else) {\n super();\n this.condition = condition;\n this.body = body;\n this.elseif = elseif;\n this.else = _else;\n }\n get astNodeType() {\n return \"if\";\n }\n}\n/**\n * @class Return\n * @extends Statement\n * @category AST\n */\nclass Return extends Statement {\n constructor(value) {\n super();\n this.value = value;\n }\n get astNodeType() {\n return \"return\";\n }\n}\n/**\n * @class Enable\n * @extends Statement\n * @category AST\n */\nclass Enable extends Statement {\n constructor(name) {\n super();\n this.name = name;\n }\n get astNodeType() {\n return \"enable\";\n }\n}\n/**\n * @class Alias\n * @extends Statement\n * @category AST\n */\nclass Alias extends Statement {\n constructor(name, type) {\n super();\n this.name = name;\n this.type = type;\n }\n get astNodeType() {\n return \"alias\";\n }\n}\n/**\n * @class Discard\n * @extends Statement\n * @category AST\n */\nclass Discard extends Statement {\n constructor() {\n super();\n }\n get astNodeType() {\n return \"discard\";\n }\n}\n/**\n * @class Break\n * @extends Statement\n * @category AST\n */\nclass Break extends Statement {\n constructor() {\n super();\n }\n get astNodeType() {\n return \"break\";\n }\n}\n/**\n * @class Continue\n * @extends Statement\n * @category AST\n */\nclass Continue extends Statement {\n constructor() {\n super();\n }\n get astNodeType() {\n return \"continue\";\n }\n}\n/**\n * @class Type\n * @extends Statement\n * @category AST\n */\nclass Type extends Statement {\n constructor(name) {\n super();\n this.name = name;\n }\n get astNodeType() {\n return \"type\";\n }\n get isStruct() {\n return false;\n }\n get isArray() {\n return false;\n }\n}\n/**\n * @class StructType\n * @extends Type\n * @category AST\n */\nclass Struct extends Type {\n constructor(name, members) {\n super(name);\n this.members = members;\n }\n get astNodeType() {\n return \"struct\";\n }\n get isStruct() {\n return true;\n }\n /// Return the index of the member with the given name, or -1 if not found.\n getMemberIndex(name) {\n for (let i = 0; i < this.members.length; i++) {\n if (this.members[i].name == name)\n return i;\n }\n return -1;\n }\n}\n/**\n * @class TemplateType\n * @extends Type\n * @category AST\n */\nclass TemplateType extends Type {\n constructor(name, format, access) {\n super(name);\n this.format = format;\n this.access = access;\n }\n get astNodeType() {\n return \"template\";\n }\n}\n/**\n * @class PointerType\n * @extends Type\n * @category AST\n */\nclass PointerType extends Type {\n constructor(name, storage, type, access) {\n super(name);\n this.storage = storage;\n this.type = type;\n this.access = access;\n }\n get astNodeType() {\n return \"pointer\";\n }\n}\n/**\n * @class ArrayType\n * @extends Type\n * @category AST\n */\nclass ArrayType extends Type {\n constructor(name, attributes, format, count) {\n super(name);\n this.attributes = attributes;\n this.format = format;\n this.count = count;\n }\n get astNodeType() {\n return \"array\";\n }\n get isArray() {\n return true;\n }\n}\n/**\n * @class SamplerType\n * @extends Type\n * @category AST\n */\nclass SamplerType extends Type {\n constructor(name, format, access) {\n super(name);\n this.format = format;\n this.access = access;\n }\n get astNodeType() {\n return \"sampler\";\n }\n}\n/**\n * @class Expression\n * @extends Node\n * @category AST\n */\nclass Expression extends Node {\n constructor() {\n super();\n }\n}\n/**\n * @class StringExpr\n * @extends Expression\n * @category AST\n */\nclass StringExpr extends Expression {\n constructor(value) {\n super();\n this.value = value;\n }\n get astNodeType() {\n return \"stringExpr\";\n }\n toString() {\n return this.value;\n }\n evaluateString() {\n return this.value;\n }\n}\n/**\n * @class CreateExpr\n * @extends Expression\n * @category AST\n */\nclass CreateExpr extends Expression {\n constructor(type, args) {\n super();\n this.type = type;\n this.args = args;\n }\n get astNodeType() {\n return \"createExpr\";\n }\n}\n/**\n * @class CallExpr\n * @extends Expression\n * @category AST\n */\nclass CallExpr extends Expression {\n constructor(name, args) {\n super();\n this.name = name;\n this.args = args;\n }\n get astNodeType() {\n return \"callExpr\";\n }\n evaluate(context) {\n switch (this.name) {\n case \"abs\":\n return Math.abs(this.args[0].evaluate(context));\n case \"acos\":\n return Math.acos(this.args[0].evaluate(context));\n case \"acosh\":\n return Math.acosh(this.args[0].evaluate(context));\n case \"asin\":\n return Math.asin(this.args[0].evaluate(context));\n case \"asinh\":\n return Math.asinh(this.args[0].evaluate(context));\n case \"atan\":\n return Math.atan(this.args[0].evaluate(context));\n case \"atan2\":\n return Math.atan2(this.args[0].evaluate(context), this.args[1].evaluate(context));\n case \"atanh\":\n return Math.atanh(this.args[0].evaluate(context));\n case \"ceil\":\n return Math.ceil(this.args[0].evaluate(context));\n case \"clamp\":\n return Math.min(Math.max(this.args[0].evaluate(context), this.args[1].evaluate(context)), this.args[2].evaluate(context));\n case \"cos\":\n return Math.cos(this.args[0].evaluate(context));\n //case \"cross\":\n //TODO: (x[i] * y[j] - x[j] * y[i])\n case \"degrees\":\n return (this.args[0].evaluate(context) * 180) / Math.PI;\n //case \"determinant\":\n //TODO implement\n case \"distance\":\n return Math.sqrt(Math.pow(this.args[0].evaluate(context) - this.args[1].evaluate(context), 2));\n case \"dot\":\n //TODO: (x[i] * y[i])\n case \"exp\":\n return Math.exp(this.args[0].evaluate(context));\n case \"exp2\":\n return Math.pow(2, this.args[0].evaluate(context));\n //case \"extractBits\":\n //TODO: implement\n //case \"firstLeadingBit\":\n //TODO: implement\n case \"floor\":\n return Math.floor(this.args[0].evaluate(context));\n case \"fma\":\n return (this.args[0].evaluate(context) * this.args[1].evaluate(context) +\n this.args[2].evaluate(context));\n case \"fract\":\n return (this.args[0].evaluate(context) -\n Math.floor(this.args[0].evaluate(context)));\n //case \"frexp\":\n //TODO: implement\n case \"inverseSqrt\":\n return 1 / Math.sqrt(this.args[0].evaluate(context));\n //case \"length\":\n //TODO: implement\n case \"log\":\n return Math.log(this.args[0].evaluate(context));\n case \"log2\":\n return Math.log2(this.args[0].evaluate(context));\n case \"max\":\n return Math.max(this.args[0].evaluate(context), this.args[1].evaluate(context));\n case \"min\":\n return Math.min(this.args[0].evaluate(context), this.args[1].evaluate(context));\n case \"mix\":\n return (this.args[0].evaluate(context) *\n (1 - this.args[2].evaluate(context)) +\n this.args[1].evaluate(context) * this.args[2].evaluate(context));\n case \"modf\":\n return (this.args[0].evaluate(context) -\n Math.floor(this.args[0].evaluate(context)));\n case \"pow\":\n return Math.pow(this.args[0].evaluate(context), this.args[1].evaluate(context));\n case \"radians\":\n return (this.args[0].evaluate(context) * Math.PI) / 180;\n case \"round\":\n return Math.round(this.args[0].evaluate(context));\n case \"sign\":\n return Math.sign(this.args[0].evaluate(context));\n case \"sin\":\n return Math.sin(this.args[0].evaluate(context));\n case \"sinh\":\n return Math.sinh(this.args[0].evaluate(context));\n case \"saturate\":\n return Math.min(Math.max(this.args[0].evaluate(context), 0), 1);\n case \"smoothstep\":\n return (this.args[0].evaluate(context) *\n this.args[0].evaluate(context) *\n (3 - 2 * this.args[0].evaluate(context)));\n case \"sqrt\":\n return Math.sqrt(this.args[0].evaluate(context));\n case \"step\":\n return this.args[0].evaluate(context) < this.args[1].evaluate(context)\n ? 0\n : 1;\n case \"tan\":\n return Math.tan(this.args[0].evaluate(context));\n case \"tanh\":\n return Math.tanh(this.args[0].evaluate(context));\n case \"trunc\":\n return Math.trunc(this.args[0].evaluate(context));\n default:\n throw new Error(\"Non const function: \" + this.name);\n }\n }\n}\n/**\n * @class VariableExpr\n * @extends Expression\n * @category AST\n */\nclass VariableExpr extends Expression {\n constructor(name) {\n super();\n this.name = name;\n }\n get astNodeType() {\n return \"varExpr\";\n }\n}\n/**\n * @class ConstExpr\n * @extends Expression\n * @category AST\n */\nclass ConstExpr extends Expression {\n constructor(name, initializer) {\n super();\n this.name = name;\n this.initializer = initializer;\n }\n get astNodeType() {\n return \"constExpr\";\n }\n evaluate(context) {\n var _a, _b;\n if (this.initializer instanceof CreateExpr) {\n // This is a struct constant\n const property = (_a = this.postfix) === null || _a === void 0 ? void 0 : _a.evaluateString(context);\n const type = (_b = this.initializer.type) === null || _b === void 0 ? void 0 : _b.name;\n const struct = context.structs.get(type);\n const memberIndex = struct === null || struct === void 0 ? void 0 : struct.getMemberIndex(property);\n if (memberIndex != -1) {\n const value = this.initializer.args[memberIndex].evaluate(context);\n return value;\n }\n console.log(memberIndex);\n }\n return this.initializer.evaluate(context);\n }\n}\n/**\n * @class LiteralExpr\n * @extends Expression\n * @category AST\n */\nclass LiteralExpr extends Expression {\n constructor(value) {\n super();\n this.value = value;\n }\n get astNodeType() {\n return \"literalExpr\";\n }\n evaluate() {\n return this.value;\n }\n}\n/**\n * @class BitcastExpr\n * @extends Expression\n * @category AST\n */\nclass BitcastExpr extends Expression {\n constructor(type, value) {\n super();\n this.type = type;\n this.value = value;\n }\n get astNodeType() {\n return \"bitcastExpr\";\n }\n}\n/**\n * @class TypecastExpr\n * @extends Expression\n * @category AST\n */\nclass TypecastExpr extends Expression {\n constructor(type, args) {\n super();\n this.type = type;\n this.args = args;\n }\n get astNodeType() {\n return \"typecastExpr\";\n }\n evaluate(context) {\n return this.args[0].evaluate(context);\n }\n}\n/**\n * @class GroupingExpr\n * @extends Expression\n * @category AST\n */\nclass GroupingExpr extends Expression {\n constructor(contents) {\n super();\n this.contents = contents;\n }\n get astNodeType() {\n return \"groupExpr\";\n }\n evaluate(context) {\n return this.contents[0].evaluate(context);\n }\n}\n/**\n * @class Operator\n * @extends Expression\n * @category AST\n */\nclass Operator extends Expression {\n constructor() {\n super();\n }\n}\n/**\n * @class UnaryOperator\n * @extends Operator\n * @category AST\n * @property {string} operator +, -, !, ~\n */\nclass UnaryOperator extends Operator {\n constructor(operator, right) {\n super();\n this.operator = operator;\n this.right = right;\n }\n get astNodeType() {\n return \"unaryOp\";\n }\n evaluate(context) {\n switch (this.operator) {\n case \"+\":\n return this.right.evaluate(context);\n case \"-\":\n return -this.right.evaluate(context);\n case \"!\":\n return this.right.evaluate(context) ? 0 : 1;\n case \"~\":\n return ~this.right.evaluate(context);\n default:\n throw new Error(\"Unknown unary operator: \" + this.operator);\n }\n }\n}\n/**\n * @class BinaryOperator\n * @extends Operator\n * @category AST\n * @property {string} operator +, -, *, /, %, ==, !=, <, >, <=, >=, &&, ||\n */\nclass BinaryOperator extends Operator {\n constructor(operator, left, right) {\n super();\n this.operator = operator;\n this.left = left;\n this.right = right;\n }\n get astNodeType() {\n return \"binaryOp\";\n }\n evaluate(context) {\n switch (this.operator) {\n case \"+\":\n return this.left.evaluate(context) + this.right.evaluate(context);\n case \"-\":\n return this.left.evaluate(context) - this.right.evaluate(context);\n case \"*\":\n return this.left.evaluate(context) * this.right.evaluate(context);\n case \"/\":\n return this.left.evaluate(context) / this.right.evaluate(context);\n case \"%\":\n return this.left.evaluate(context) % this.right.evaluate(context);\n case \"==\":\n return this.left.evaluate(context) == this.right.evaluate(context)\n ? 1\n : 0;\n case \"!=\":\n return this.left.evaluate(context) != this.right.evaluate(context)\n ? 1\n : 0;\n case \"<\":\n return this.left.evaluate(context) < this.right.evaluate(context)\n ? 1\n : 0;\n case \">\":\n return this.left.evaluate(context) > this.right.evaluate(context)\n ? 1\n : 0;\n case \"<=\":\n return this.left.evaluate(context) <= this.right.evaluate(context)\n ? 1\n : 0;\n case \">=\":\n return this.left.evaluate(context) >= this.right.evaluate(context)\n ? 1\n : 0;\n case \"&&\":\n return this.left.evaluate(context) && this.right.evaluate(context)\n ? 1\n : 0;\n case \"||\":\n return this.left.evaluate(context) || this.right.evaluate(context)\n ? 1\n : 0;\n default:\n throw new Error(`Unknown operator ${this.operator}`);\n }\n }\n}\n/**\n * @class SwitchCase\n * @extends Node\n * @category AST\n */\nclass SwitchCase extends Node {\n constructor() {\n super();\n }\n}\n/**\n * @class Case\n * @extends SwitchCase\n * @category AST\n */\nclass Case extends SwitchCase {\n constructor(selector, body) {\n super();\n this.selector = selector;\n this.body = body;\n }\n get astNodeType() {\n return \"case\";\n }\n}\n/**\n * @class Default\n * @extends SwitchCase\n * @category AST\n */\nclass Default extends SwitchCase {\n constructor(body) {\n super();\n this.body = body;\n }\n get astNodeType() {\n return \"default\";\n }\n}\n/**\n * @class Argument\n * @extends Node\n * @category AST\n */\nclass Argument extends Node {\n constructor(name, type, attributes) {\n super();\n this.name = name;\n this.type = type;\n this.attributes = attributes;\n }\n get astNodeType() {\n return \"argument\";\n }\n}\n/**\n * @class ElseIf\n * @extends Node\n * @category AST\n */\nclass ElseIf extends Node {\n constructor(condition, body) {\n super();\n this.condition = condition;\n this.body = body;\n }\n get astNodeType() {\n return \"elseif\";\n }\n}\n/**\n * @class Member\n * @extends Node\n * @category AST\n */\nclass Member extends Node {\n constructor(name, type, attributes) {\n super();\n this.name = name;\n this.type = type;\n this.attributes = attributes;\n }\n get astNodeType() {\n return \"member\";\n }\n}\n/**\n * @class Attribute\n * @extends Node\n * @category AST\n */\nclass Attribute extends Node {\n constructor(name, value) {\n super();\n this.name = name;\n this.value = value;\n }\n get astNodeType() {\n return \"attribute\";\n }\n}\nvar _a;\nvar TokenClass;\n(function (TokenClass) {\n TokenClass[TokenClass[\"token\"] = 0] = \"token\";\n TokenClass[TokenClass[\"keyword\"] = 1] = \"keyword\";\n TokenClass[TokenClass[\"reserved\"] = 2] = \"reserved\";\n})(TokenClass || (TokenClass = {}));\nclass TokenType {\n constructor(name, type, rule) {\n this.name = name;\n this.type = type;\n this.rule = rule;\n }\n toString() {\n return this.name;\n }\n}\n/// Catalog of defined token types, keywords, and reserved words.\nclass TokenTypes {\n}\n_a = TokenTypes;\nTokenTypes.none = new TokenType(\"\", TokenClass.reserved, \"\");\nTokenTypes.eof = new TokenType(\"EOF\", TokenClass.token, \"\");\nTokenTypes.reserved = {\n asm: new TokenType(\"asm\", TokenClass.reserved, \"asm\"),\n bf16: new TokenType(\"bf16\", TokenClass.reserved, \"bf16\"),\n do: new TokenType(\"do\", TokenClass.reserved, \"do\"),\n enum: new TokenType(\"enum\", TokenClass.reserved, \"enum\"),\n f16: new TokenType(\"f16\", TokenClass.reserved, \"f16\"),\n f64: new TokenType(\"f64\", TokenClass.reserved, \"f64\"),\n handle: new TokenType(\"handle\", TokenClass.reserved, \"handle\"),\n i8: new TokenType(\"i8\", TokenClass.reserved, \"i8\"),\n i16: new TokenType(\"i16\", TokenClass.reserved, \"i16\"),\n i64: new TokenType(\"i64\", TokenClass.reserved, \"i64\"),\n mat: new TokenType(\"mat\", TokenClass.reserved, \"mat\"),\n premerge: new TokenType(\"premerge\", TokenClass.reserved, \"premerge\"),\n regardless: new TokenType(\"regardless\", TokenClass.reserved, \"regardless\"),\n typedef: new TokenType(\"typedef\", TokenClass.reserved, \"typedef\"),\n u8: new TokenType(\"u8\", TokenClass.reserved, \"u8\"),\n u16: new TokenType(\"u16\", TokenClass.reserved, \"u16\"),\n u64: new TokenType(\"u64\", TokenClass.reserved, \"u64\"),\n unless: new TokenType(\"unless\", TokenClass.reserved, \"unless\"),\n using: new TokenType(\"using\", TokenClass.reserved, \"using\"),\n vec: new TokenType(\"vec\", TokenClass.reserved, \"vec\"),\n void: new TokenType(\"void\", TokenClass.reserved, \"void\"),\n};\nTokenTypes.keywords = {\n array: new TokenType(\"array\", TokenClass.keyword, \"array\"),\n atomic: new TokenType(\"atomic\", TokenClass.keyword, \"atomic\"),\n bool: new TokenType(\"bool\", TokenClass.keyword, \"bool\"),\n f32: new TokenType(\"f32\", TokenClass.keyword, \"f32\"),\n i32: new TokenType(\"i32\", TokenClass.keyword, \"i32\"),\n mat2x2: new TokenType(\"mat2x2\", TokenClass.keyword, \"mat2x2\"),\n mat2x3: new TokenType(\"mat2x3\", TokenClass.keyword, \"mat2x3\"),\n mat2x4: new TokenType(\"mat2x4\", TokenClass.keyword, \"mat2x4\"),\n mat3x2: new TokenType(\"mat3x2\", TokenClass.keyword, \"mat3x2\"),\n mat3x3: new TokenType(\"mat3x3\", TokenClass.keyword, \"mat3x3\"),\n mat3x4: new TokenType(\"mat3x4\", TokenClass.keyword, \"mat3x4\"),\n mat4x2: new TokenType(\"mat4x2\", TokenClass.keyword, \"mat4x2\"),\n mat4x3: new TokenType(\"mat4x3\", TokenClass.keyword, \"mat4x3\"),\n mat4x4: new TokenType(\"mat4x4\", TokenClass.keyword, \"mat4x4\"),\n ptr: new TokenType(\"ptr\", TokenClass.keyword, \"ptr\"),\n sampler: new TokenType(\"sampler\", TokenClass.keyword, \"sampler\"),\n sampler_comparison: new TokenType(\"sampler_comparison\", TokenClass.keyword, \"sampler_comparison\"),\n struct: new TokenType(\"struct\", TokenClass.keyword, \"struct\"),\n texture_1d: new TokenType(\"texture_1d\", TokenClass.keyword, \"texture_1d\"),\n texture_2d: new TokenType(\"texture_2d\", TokenClass.keyword, \"texture_2d\"),\n texture_2d_array: new TokenType(\"texture_2d_array\", TokenClass.keyword, \"texture_2d_array\"),\n texture_3d: new TokenType(\"texture_3d\", TokenClass.keyword, \"texture_3d\"),\n texture_cube: new TokenType(\"texture_cube\", TokenClass.keyword, \"texture_cube\"),\n texture_cube_array: new TokenType(\"texture_cube_array\", TokenClass.keyword, \"texture_cube_array\"),\n texture_multisampled_2d: new TokenType(\"texture_multisampled_2d\", TokenClass.keyword, \"texture_multisampled_2d\"),\n texture_storage_1d: new TokenType(\"texture_storage_1d\", TokenClass.keyword, \"texture_storage_1d\"),\n texture_storage_2d: new TokenType(\"texture_storage_2d\", TokenClass.keyword, \"texture_storage_2d\"),\n texture_storage_2d_array: new TokenType(\"texture_storage_2d_array\", TokenClass.keyword, \"texture_storage_2d_array\"),\n texture_storage_3d: new TokenType(\"texture_storage_3d\", TokenClass.keyword, \"texture_storage_3d\"),\n texture_depth_2d: new TokenType(\"texture_depth_2d\", TokenClass.keyword, \"texture_depth_2d\"),\n texture_depth_2d_array: new TokenType(\"texture_depth_2d_array\", TokenClass.keyword, \"texture_depth_2d_array\"),\n texture_depth_cube: new TokenType(\"texture_depth_cube\", TokenClass.keyword, \"texture_depth_cube\"),\n texture_depth_cube_array: new TokenType(\"texture_depth_cube_array\", TokenClass.keyword, \"texture_depth_cube_array\"),\n texture_depth_multisampled_2d: new TokenType(\"texture_depth_multisampled_2d\", TokenClass.keyword, \"texture_depth_multisampled_2d\"),\n texture_external: new TokenType(\"texture_external\", TokenClass.keyword, \"texture_external\"),\n u32: new TokenType(\"u32\", TokenClass.keyword, \"u32\"),\n vec2: new TokenType(\"vec2\", TokenClass.keyword, \"vec2\"),\n vec3: new TokenType(\"vec3\", TokenClass.keyword, \"vec3\"),\n vec4: new TokenType(\"vec4\", TokenClass.keyword, \"vec4\"),\n bitcast: new TokenType(\"bitcast\", TokenClass.keyword, \"bitcast\"),\n block: new TokenType(\"block\", TokenClass.keyword, \"block\"),\n break: new TokenType(\"break\", TokenClass.keyword, \"break\"),\n case: new TokenType(\"case\", TokenClass.keyword, \"case\"),\n continue: new TokenType(\"continue\", TokenClass.keyword, \"continue\"),\n continuing: new TokenType(\"continuing\", TokenClass.keyword, \"continuing\"),\n default: new TokenType(\"default\", TokenClass.keyword, \"default\"),\n discard: new TokenType(\"discard\", TokenClass.keyword, \"discard\"),\n else: new TokenType(\"else\", TokenClass.keyword, \"else\"),\n enable: new TokenType(\"enable\", TokenClass.keyword, \"enable\"),\n fallthrough: new TokenType(\"fallthrough\", TokenClass.keyword, \"fallthrough\"),\n false: new TokenType(\"false\", TokenClass.keyword, \"false\"),\n fn: new TokenType(\"fn\", TokenClass.keyword, \"fn\"),\n for: new TokenType(\"for\", TokenClass.keyword, \"for\"),\n function: new TokenType(\"function\", TokenClass.keyword, \"function\"),\n if: new TokenType(\"if\", TokenClass.keyword, \"if\"),\n let: new TokenType(\"let\", TokenClass.keyword, \"let\"),\n const: new TokenType(\"const\", TokenClass.keyword, \"const\"),\n loop: new TokenType(\"loop\", TokenClass.keyword, \"loop\"),\n while: new TokenType(\"while\", TokenClass.keyword, \"while\"),\n private: new TokenType(\"private\", TokenClass.keyword, \"private\"),\n read: new TokenType(\"read\", TokenClass.keyword, \"read\"),\n read_write: new TokenType(\"read_write\", TokenClass.keyword, \"read_write\"),\n return: new TokenType(\"return\", TokenClass.keyword, \"return\"),\n storage: new TokenType(\"storage\", TokenClass.keyword, \"storage\"),\n switch: new TokenType(\"switch\", TokenClass.keyword, \"switch\"),\n true: new TokenType(\"true\", TokenClass.keyword, \"true\"),\n alias: new TokenType(\"alias\", TokenClass.keyword, \"alias\"),\n type: new TokenType(\"type\", TokenClass.keyword, \"type\"),\n uniform: new TokenType(\"uniform\", TokenClass.keyword, \"uniform\"),\n var: new TokenType(\"var\", TokenClass.keyword, \"var\"),\n override: new TokenType(\"override\", TokenClass.keyword, \"override\"),\n workgroup: new TokenType(\"workgroup\", TokenClass.keyword, \"workgroup\"),\n write: new TokenType(\"write\", TokenClass.keyword, \"write\"),\n r8unorm: new TokenType(\"r8unorm\", TokenClass.keyword, \"r8unorm\"),\n r8snorm: new TokenType(\"r8snorm\", TokenClass.keyword, \"r8snorm\"),\n r8uint: new TokenType(\"r8uint\", TokenClass.keyword, \"r8uint\"),\n r8sint: new TokenType(\"r8sint\", TokenClass.keyword, \"r8sint\"),\n r16uint: new TokenType(\"r16uint\", TokenClass.keyword, \"r16uint\"),\n r16sint: new TokenType(\"r16sint\", TokenClass.keyword, \"r16sint\"),\n r16float: new TokenType(\"r16float\", TokenClass.keyword, \"r16float\"),\n rg8unorm: new TokenType(\"rg8unorm\", TokenClass.keyword, \"rg8unorm\"),\n rg8snorm: new TokenType(\"rg8snorm\", TokenClass.keyword, \"rg8snorm\"),\n rg8uint: new TokenType(\"rg8uint\", TokenClass.keyword, \"rg8uint\"),\n rg8sint: new TokenType(\"rg8sint\", TokenClass.keyword, \"rg8sint\"),\n r32uint: new TokenType(\"r32uint\", TokenClass.keyword, \"r32uint\"),\n r32sint: new TokenType(\"r32sint\", TokenClass.keyword, \"r32sint\"),\n r32float: new TokenType(\"r32float\", TokenClass.keyword, \"r32float\"),\n rg16uint: new TokenType(\"rg16uint\", TokenClass.keyword, \"rg16uint\"),\n rg16sint: new TokenType(\"rg16sint\", TokenClass.keyword, \"rg16sint\"),\n rg16float: new TokenType(\"rg16float\", TokenClass.keyword, \"rg16float\"),\n rgba8unorm: new TokenType(\"rgba8unorm\", TokenClass.keyword, \"rgba8unorm\"),\n rgba8unorm_srgb: new TokenType(\"rgba8unorm_srgb\", TokenClass.keyword, \"rgba8unorm_srgb\"),\n rgba8snorm: new TokenType(\"rgba8snorm\", TokenClass.keyword, \"rgba8snorm\"),\n rgba8uint: new TokenType(\"rgba8uint\", TokenClass.keyword, \"rgba8uint\"),\n rgba8sint: new TokenType(\"rgba8sint\", TokenClass.keyword, \"rgba8sint\"),\n bgra8unorm: new TokenType(\"bgra8unorm\", TokenClass.keyword, \"bgra8unorm\"),\n bgra8unorm_srgb: new TokenType(\"bgra8unorm_srgb\", TokenClass.keyword, \"bgra8unorm_srgb\"),\n rgb10a2unorm: new TokenType(\"rgb10a2unorm\", TokenClass.keyword, \"rgb10a2unorm\"),\n rg11b10float: new TokenType(\"rg11b10float\", TokenClass.keyword, \"rg11b10float\"),\n rg32uint: new TokenType(\"rg32uint\", TokenClass.keyword, \"rg32uint\"),\n rg32sint: new TokenType(\"rg32sint\", TokenClass.keyword, \"rg32sint\"),\n rg32float: new TokenType(\"rg32float\", TokenClass.keyword, \"rg32float\"),\n rgba16uint: new TokenType(\"rgba16uint\", TokenClass.keyword, \"rgba16uint\"),\n rgba16sint: new TokenType(\"rgba16sint\", TokenClass.keyword, \"rgba16sint\"),\n rgba16float: new TokenType(\"rgba16float\", TokenClass.keyword, \"rgba16float\"),\n rgba32uint: new TokenType(\"rgba32uint\", TokenClass.keyword, \"rgba32uint\"),\n rgba32sint: new TokenType(\"rgba32sint\", TokenClass.keyword, \"rgba32sint\"),\n rgba32float: new TokenType(\"rgba32float\", TokenClass.keyword, \"rgba32float\"),\n static_assert: new TokenType(\"static_assert\", TokenClass.keyword, \"static_assert\"),\n // WGSL grammar has a few keywords that have different token names than the strings they\n // represent. Aliasing them here.\n /*int32: new TokenType(\"i32\", TokenClass.keyword, \"i32\"),\n uint32: new TokenType(\"u32\", TokenClass.keyword, \"u32\"),\n float32: new TokenType(\"f32\", TokenClass.keyword, \"f32\"),\n pointer: new TokenType(\"ptr\", TokenClass.keyword, \"ptr\"),*/\n};\nTokenTypes.tokens = {\n decimal_float_literal: new TokenType(\"decimal_float_literal\", TokenClass.token, /((-?[0-9]*\\.[0-9]+|-?[0-9]+\\.[0-9]*)((e|E)(\\+|-)?[0-9]+)?f?)|(-?[0-9]+(e|E)(\\+|-)?[0-9]+f?)|([0-9]+f)/),\n hex_float_literal: new TokenType(\"hex_float_literal\", TokenClass.token, /-?0x((([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.[0-9a-fA-F]*)((p|P)(\\+|-)?[0-9]+f?)?)|([0-9a-fA-F]+(p|P)(\\+|-)?[0-9]+f?))/),\n int_literal: new TokenType(\"int_literal\", TokenClass.token, /-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/),\n uint_literal: new TokenType(\"uint_literal\", TokenClass.token, /0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/),\n ident: new TokenType(\"ident\", TokenClass.token, /[a-zA-Z][0-9a-zA-Z_]*/),\n and: new TokenType(\"and\", TokenClass.token, \"&\"),\n and_and: new TokenType(\"and_and\", TokenClass.token, \"&&\"),\n arrow: new TokenType(\"arrow \", TokenClass.token, \"->\"),\n attr: new TokenType(\"attr\", TokenClass.token, \"@\"),\n attr_left: new TokenType(\"attr_left\", TokenClass.token, \"[[\"),\n attr_right: new TokenType(\"attr_right\", TokenClass.token, \"]]\"),\n forward_slash: new TokenType(\"forward_slash\", TokenClass.token, \"/\"),\n bang: new TokenType(\"bang\", TokenClass.token, \"!\"),\n bracket_left: new TokenType(\"bracket_left\", TokenClass.token, \"[\"),\n bracket_right: new TokenType(\"bracket_right\", TokenClass.token, \"]\"),\n brace_left: new TokenType(\"brace_left\", TokenClass.token, \"{\"),\n brace_right: new TokenType(\"brace_right\", TokenClass.token, \"}\"),\n colon: new TokenType(\"colon\", TokenClass.token, \":\"),\n comma: new TokenType(\"comma\", TokenClass.token, \",\"),\n equal: new TokenType(\"equal\", TokenClass.token, \"=\"),\n equal_equal: new TokenType(\"equal_equal\", TokenClass.token, \"==\"),\n not_equal: new TokenType(\"not_equal\", TokenClass.token, \"!=\"),\n greater_than: new TokenType(\"greater_than\", TokenClass.token, \">\"),\n greater_than_equal: new TokenType(\"greater_than_equal\", TokenClass.token, \">=\"),\n shift_right: new TokenType(\"shift_right\", TokenClass.token, \">>\"),\n less_than: new TokenType(\"less_than\", TokenClass.token, \"<\"),\n less_than_equal: new TokenType(\"less_than_equal\", TokenClass.token, \"<=\"),\n shift_left: new TokenType(\"shift_left\", TokenClass.token, \"<<\"),\n modulo: new TokenType(\"modulo\", TokenClass.token, \"%\"),\n minus: new TokenType(\"minus\", TokenClass.token, \"-\"),\n minus_minus: new TokenType(\"minus_minus\", TokenClass.token, \"--\"),\n period: new TokenType(\"period\", TokenClass.token, \".\"),\n plus: new TokenType(\"plus\", TokenClass.token, \"+\"),\n plus_plus: new TokenType(\"plus_plus\", TokenClass.token, \"++\"),\n or: new TokenType(\"or\", TokenClass.token, \"|\"),\n or_or: new TokenType(\"or_or\", TokenClass.token, \"||\"),\n paren_left: new TokenType(\"paren_left\", TokenClass.token, \"(\"),\n paren_right: new TokenType(\"paren_right\", TokenClass.token, \")\"),\n semicolon: new TokenType(\"semicolon\", TokenClass.token, \";\"),\n star: new TokenType(\"star\", TokenClass.token, \"*\"),\n tilde: new TokenType(\"tilde\", TokenClass.token, \"~\"),\n underscore: new TokenType(\"underscore\", TokenClass.token, \"_\"),\n xor: new TokenType(\"xor\", TokenClass.token, \"^\"),\n plus_equal: new TokenType(\"plus_equal\", TokenClass.token, \"+=\"),\n minus_equal: new TokenType(\"minus_equal\", TokenClass.token, \"-=\"),\n times_equal: new TokenType(\"times_equal\", TokenClass.token, \"*=\"),\n division_equal: new TokenType(\"division_equal\", TokenClass.token, \"/=\"),\n modulo_equal: new TokenType(\"modulo_equal\", TokenClass.token, \"%=\"),\n and_equal: new TokenType(\"and_equal\", TokenClass.token, \"&=\"),\n or_equal: new TokenType(\"or_equal\", TokenClass.token, \"|=\"),\n xor_equal: new TokenType(\"xor_equal\", TokenClass.token, \"^=\"),\n shift_right_equal: new TokenType(\"shift_right_equal\", TokenClass.token, \">>=\"),\n shift_left_equal: new TokenType(\"shift_left_equal\", TokenClass.token, \"<<=\"),\n};\nTokenTypes.storage_class = [\n _a.keywords.function,\n _a.keywords.private,\n _a.keywords.workgroup,\n _a.keywords.uniform,\n _a.keywords.storage,\n];\nTokenTypes.access_mode = [\n _a.keywords.read,\n _a.keywords.write,\n _a.keywords.read_write,\n];\nTokenTypes.sampler_type = [\n _a.keywords.sampler,\n _a.keywords.sampler_comparison,\n];\nTokenTypes.sampled_texture_type = [\n _a.keywords.texture_1d,\n _a.keywords.texture_2d,\n _a.keywords.texture_2d_array,\n _a.keywords.texture_3d,\n _a.keywords.texture_cube,\n _a.keywords.texture_cube_array,\n];\nTokenTypes.multisampled_texture_type = [\n _a.keywords.texture_multisampled_2d,\n];\nTokenTypes.storage_texture_type = [\n _a.keywords.texture_storage_1d,\n _a.keywords.texture_storage_2d,\n _a.keywords.texture_storage_2d_array,\n _a.keywords.texture_storage_3d,\n];\nTokenTypes.depth_texture_type = [\n _a.keywords.texture_depth_2d,\n _a.keywords.texture_depth_2d_array,\n _a.keywords.texture_depth_cube,\n _a.keywords.texture_depth_cube_array,\n _a.keywords.texture_depth_multisampled_2d,\n];\nTokenTypes.texture_external_type = [_a.keywords.texture_external];\nTokenTypes.any_texture_type = [\n ..._a.sampled_texture_type,\n ..._a.multisampled_texture_type,\n ..._a.storage_texture_type,\n ..._a.depth_texture_type,\n ..._a.texture_external_type,\n];\nTokenTypes.texel_format = [\n _a.keywords.r8unorm,\n _a.keywords.r8snorm,\n _a.keywords.r8uint,\n _a.keywords.r8sint,\n _a.keywords.r16uint,\n _a.keywords.r16sint,\n _a.keywords.r16float,\n _a.keywords.rg8unorm,\n _a.keywords.rg8snorm,\n _a.keywords.rg8uint,\n _a.keywords.rg8sint,\n _a.keywords.r32uint,\n _a.keywords.r32sint,\n _a.keywords.r32float,\n _a.keywords.rg16uint,\n _a.keywords.rg16sint,\n _a.keywords.rg16float,\n _a.keywords.rgba8unorm,\n _a.keywords.rgba8unorm_srgb,\n _a.keywords.rgba8snorm,\n _a.keywords.rgba8uint,\n _a.keywords.rgba8sint,\n _a.keywords.bgra8unorm,\n _a.keywords.bgra8unorm_srgb,\n _a.keywords.rgb10a2unorm,\n _a.keywords.rg11b10float,\n _a.keywords.rg32uint,\n _a.keywords.rg32sint,\n _a.keywords.rg32float,\n _a.keywords.rgba16uint,\n _a.keywords.rgba16sint,\n _a.keywords.rgba16float,\n _a.keywords.rgba32uint,\n _a.keywords.rgba32sint,\n _a.keywords.rgba32float,\n];\nTokenTypes.const_literal = [\n _a.tokens.int_literal,\n _a.tokens.uint_literal,\n _a.tokens.decimal_float_literal,\n _a.tokens.hex_float_literal,\n _a.keywords.true,\n _a.keywords.false,\n];\nTokenTypes.literal_or_ident = [\n _a.tokens.ident,\n _a.tokens.int_literal,\n _a.tokens.uint_literal,\n _a.tokens.decimal_float_literal,\n _a.tokens.hex_float_literal,\n];\nTokenTypes.element_count_expression = [\n _a.tokens.int_literal,\n _a.tokens.uint_literal,\n _a.tokens.ident,\n];\nTokenTypes.template_types = [\n _a.keywords.vec2,\n _a.keywords.vec3,\n _a.keywords.vec4,\n _a.keywords.mat2x2,\n _a.keywords.mat2x3,\n _a.keywords.mat2x4,\n _a.keywords.mat3x2,\n _a.keywords.mat3x3,\n _a.keywords.mat3x4,\n _a.keywords.mat4x2,\n _a.keywords.mat4x3,\n _a.keywords.mat4x4,\n _a.keywords.atomic,\n _a.keywords.bitcast,\n ..._a.any_texture_type,\n];\n// The grammar calls out 'block', but attribute grammar is defined to use a 'ident'.\n// The attribute grammar should be ident | block.\nTokenTypes.attribute_name = [_a.tokens.ident, _a.keywords.block];\nTokenTypes.assignment_operators = [\n _a.tokens.equal,\n _a.tokens.plus_equal,\n _a.tokens.minus_equal,\n _a.tokens.times_equal,\n _a.tokens.division_equal,\n _a.tokens.modulo_equal,\n _a.tokens.and_equal,\n _a.tokens.or_equal,\n _a.tokens.xor_equal,\n _a.tokens.shift_right_equal,\n _a.tokens.shift_left_equal,\n];\nTokenTypes.increment_operators = [\n _a.tokens.plus_plus,\n _a.tokens.minus_minus,\n];\n/// A token parsed by the WgslScanner.\nclass Token {\n constructor(type, lexeme, line) {\n this.type = type;\n this.lexeme = lexeme;\n this.line = line;\n }\n toString() {\n return this.lexeme;\n }\n isTemplateType() {\n return TokenTypes.template_types.indexOf(this.type) != -1;\n }\n isArrayType() {\n return this.type == TokenTypes.keywords.array;\n }\n isArrayOrTemplateType() {\n return this.isArrayType() || this.isTemplateType();\n }\n}\n/// Lexical scanner for the WGSL language. This takes an input source text and generates a list\n/// of Token objects, which can then be fed into the WgslParser to generate an AST.\nclass WgslScanner {\n constructor(source) {\n this._tokens = [];\n this._start = 0;\n this._current = 0;\n this._line = 1;\n this._source = source !== null && source !== void 0 ? source : \"\";\n }\n /// Scan all tokens from the source.\n scanTokens() {\n while (!this._isAtEnd()) {\n this._start = this._current;\n if (!this.scanToken())\n throw `Invalid syntax at line ${this._line}`;\n }\n this._tokens.push(new Token(TokenTypes.eof, \"\", this._line));\n return this._tokens;\n }\n /// Scan a single token from the source.\n scanToken() {\n // Find the longest consecutive set of characters that match a rule.\n let lexeme = this._advance();\n // Skip line-feed, adding to the line counter.\n if (lexeme == \"\\n\") {\n this._line++;\n return true;\n }\n // Skip whitespace\n if (this._isWhitespace(lexeme)) {\n return true;\n }\n if (lexeme == \"/\") {\n // If it's a // comment, skip everything until the next line-feed.\n if (this._peekAhead() == \"/\") {\n while (lexeme != \"\\n\") {\n if (this._isAtEnd())\n return true;\n lexeme = this._advance();\n }\n // skip the linefeed\n this._line++;\n return true;\n }\n else if (this._peekAhead() == \"*\") {\n // If it's a / * block comment, skip everything until the matching * /,\n // allowing for nested block comments.\n this._advance();\n let commentLevel = 1;\n while (commentLevel > 0) {\n if (this._isAtEnd())\n return true;\n lexeme = this._advance();\n if (lexeme == \"\\n\") {\n this._line++;\n }\n else if (lexeme == \"*\") {\n if (this._peekAhead() == \"/\") {\n this._advance();\n commentLevel--;\n if (commentLevel == 0) {\n return true;\n }\n }\n }\n else if (lexeme == \"/\") {\n if (this._peekAhead() == \"*\") {\n this._advance();\n commentLevel++;\n }\n }\n }\n return true;\n }\n }\n let matchType = TokenTypes.none;\n for (;;) {\n let matchedType = this._findType(lexeme);\n // An exception to \"longest lexeme\" rule is '>>'. In the case of 1>>2, it's a\n // shift_right.\n // In the case of array>, it's two greater_than's (one to close the vec4,\n // and one to close the array).\n // Another ambiguity is '>='. In the case of vec2=vec2(1,2),\n // it's a greather_than and an equal, not a greater_than_equal.\n // WGSL requires context sensitive parsing to resolve these ambiguities. Both of these cases\n // are predicated on it the > either closing a template, or being part of an operator.\n // The solution here is to check if there was a less_than up to some number of tokens\n // previously, and the token prior to that is a keyword that requires a '<', then it will be\n // split into two operators; otherwise it's a single operator.\n const nextLexeme = this._peekAhead();\n if (lexeme == \">\" && (nextLexeme == \">\" || nextLexeme == \"=\")) {\n let foundLessThan = false;\n let ti = this._tokens.length - 1;\n for (let count = 0; count < 5 && ti >= 0; ++count, --ti) {\n if (this._tokens[ti].type === TokenTypes.tokens.less_than) {\n if (ti > 0 && this._tokens[ti - 1].isArrayOrTemplateType()) {\n foundLessThan = true;\n }\n break;\n }\n }\n // If there was a less_than in the recent token history, then this is probably a\n // greater_than.\n if (foundLessThan) {\n this._addToken(matchedType);\n return true;\n }\n }\n // The current lexeme may not match any rule, but some token types may be invalid for\n // part of the string but valid after a few more characters.\n // For example, 0x.5 is a hex_float_literal. But as it's being scanned,\n // \"0\" is a int_literal, then \"0x\" is invalid. If we stopped there, it would return\n // the int_literal \"0\", but that's incorrect. So if we look forward a few characters,\n // we'd get \"0x.\", which is still invalid, followed by \"0x.5\" which is the correct\n // hex_float_literal. So that means if we hit an non-matching string, we should look\n // ahead up to two characters to see if the string starts matching a valid rule again.\n if (matchedType === TokenTypes.none) {\n let lookAheadLexeme = lexeme;\n let lookAhead = 0;\n const maxLookAhead = 2;\n for (let li = 0; li < maxLookAhead; ++li) {\n lookAheadLexeme += this._peekAhead(li);\n matchedType = this._findType(lookAheadLexeme);\n if (matchedType !== TokenTypes.none) {\n lookAhead = li;\n break;\n }\n }\n if (matchedType === TokenTypes.none) {\n if (matchType === TokenTypes.none)\n return false;\n this._current--;\n this._addToken(matchType);\n return true;\n }\n lexeme = lookAheadLexeme;\n this._current += lookAhead + 1;\n }\n matchType = matchedType;\n if (this._isAtEnd())\n break;\n lexeme += this._advance();\n }\n // We got to the end of the input stream. Then the token we've ready so far is it.\n if (matchType === TokenTypes.none)\n return false;\n this._addToken(matchType);\n return true;\n }\n _findType(lexeme) {\n for (const name in TokenTypes.keywords) {\n const type = TokenTypes.keywords[name];\n if (this._match(lexeme, type.rule)) {\n return type;\n }\n }\n for (const name in TokenTypes.tokens) {\n const type = TokenTypes.tokens[name];\n if (this._match(lexeme, type.rule)) {\n return type;\n }\n }\n return TokenTypes.none;\n }\n _match(lexeme, rule) {\n if (typeof rule === \"string\") {\n if (rule == lexeme) {\n return true;\n }\n }\n else {\n // regex\n const match = rule.exec(lexeme);\n if (match && match.index == 0 && match[0] == lexeme)\n return true;\n }\n return false;\n }\n _isAtEnd() {\n return this._current >= this._source.length;\n }\n _isWhitespace(c) {\n return c == \" \" || c == \"\\t\" || c == \"\\r\";\n }\n _advance(amount = 0) {\n let c = this._source[this._current];\n amount = amount || 0;\n amount++;\n this._current += amount;\n return c;\n }\n _peekAhead(offset = 0) {\n offset = offset || 0;\n if (this._current + offset >= this._source.length)\n return \"\\0\";\n return this._source[this._current + offset];\n }\n _addToken(type) {\n const text = this._source.substring(this._start, this._current);\n this._tokens.push(new Token(type, text, this._line));\n }\n}\n/**\n * @author Brendan Duncan / https://github.com/brendan-duncan\n */\n/// Parse a sequence of tokens from the WgslScanner into an Abstract Syntax Tree (AST).\nclass WgslParser {\n constructor() {\n this._tokens = [];\n this._current = 0;\n this._context = new ParseContext();\n }\n parse(tokensOrCode) {\n this._initialize(tokensOrCode);\n let statements = [];\n while (!this._isAtEnd()) {\n const statement = this._global_decl_or_directive();\n if (!statement)\n break;\n statements.push(statement);\n }\n return statements;\n }\n _initialize(tokensOrCode) {\n if (tokensOrCode) {\n if (typeof tokensOrCode == \"string\") {\n const scanner = new WgslScanner(tokensOrCode);\n this._tokens = scanner.scanTokens();\n }\n else {\n this._tokens = tokensOrCode;\n }\n }\n else {\n this._tokens = [];\n }\n this._current = 0;\n }\n _error(token, message) {\n console.error(token, message);\n return {\n token,\n message,\n toString: function () {\n return `${message}`;\n },\n };\n }\n _isAtEnd() {\n return (this._current >= this._tokens.length ||\n this._peek().type == TokenTypes.eof);\n }\n _match(types) {\n if (types instanceof TokenType) {\n if (this._check(types)) {\n this._advance();\n return true;\n }\n return false;\n }\n for (let i = 0, l = types.length; i < l; ++i) {\n const type = types[i];\n if (this._check(type)) {\n this._advance();\n return true;\n }\n }\n return false;\n }\n _consume(types, message) {\n if (this._check(types))\n return this._advance();\n throw this._error(this._peek(), message);\n }\n _check(types) {\n if (this._isAtEnd())\n return false;\n const tk = this._peek();\n if (types instanceof Array) {\n let t = tk.type;\n let index = types.indexOf(t);\n return index != -1;\n }\n return tk.type == types;\n }\n _advance() {\n if (!this._isAtEnd())\n this._current++;\n return this._previous();\n }\n _peek() {\n return this._tokens[this._current];\n }\n _previous() {\n return this._tokens[this._current - 1];\n }\n _global_decl_or_directive() {\n // semicolon\n // global_variable_decl semicolon\n // global_constant_decl semicolon\n // type_alias semicolon\n // struct_decl\n // function_decl\n // enable_directive\n // Ignore any stand-alone semicolons\n while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd())\n ;\n if (this._match(TokenTypes.keywords.alias)) {\n const type = this._type_alias();\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\n return type;\n }\n if (this._match(TokenTypes.keywords.enable)) {\n const enable = this._enable_directive();\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\n return enable;\n }\n // The following statements have an optional attribute*\n const attrs = this._attribute();\n if (this._check(TokenTypes.keywords.var)) {\n const _var = this._global_variable_decl();\n if (_var != null)\n _var.attributes = attrs;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n return _var;\n }\n if (this._check(TokenTypes.keywords.override)) {\n const _override = this._override_variable_decl();\n if (_override != null)\n _override.attributes = attrs;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n return _override;\n }\n if (this._check(TokenTypes.keywords.let)) {\n const _let = this._global_let_decl();\n if (_let != null)\n _let.attributes = attrs;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n return _let;\n }\n if (this._check(TokenTypes.keywords.const)) {\n const _const = this._global_const_decl();\n if (_const != null)\n _const.attributes = attrs;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n return _const;\n }\n if (this._check(TokenTypes.keywords.struct)) {\n const _struct = this._struct_decl();\n if (_struct != null)\n _struct.attributes = attrs;\n return _struct;\n }\n if (this._check(TokenTypes.keywords.fn)) {\n const _fn = this._function_decl();\n if (_fn != null)\n _fn.attributes = attrs;\n return _fn;\n }\n return null;\n }\n _function_decl() {\n // attribute* function_header compound_statement\n // function_header: fn ident paren_left param_list? paren_right (arrow attribute* type_decl)?\n if (!this._match(TokenTypes.keywords.fn))\n return null;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected function name.\").toString();\n this._consume(TokenTypes.tokens.paren_left, \"Expected '(' for function arguments.\");\n const args = [];\n if (!this._check(TokenTypes.tokens.paren_right)) {\n do {\n if (this._check(TokenTypes.tokens.paren_right))\n break;\n const argAttrs = this._attribute();\n const name = this._consume(TokenTypes.tokens.ident, \"Expected argument name.\").toString();\n this._consume(TokenTypes.tokens.colon, \"Expected ':' for argument type.\");\n const typeAttrs = this._attribute();\n const type = this._type_decl();\n if (type != null) {\n type.attributes = typeAttrs;\n args.push(new Argument(name, type, argAttrs));\n }\n } while (this._match(TokenTypes.tokens.comma));\n }\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')' after function arguments.\");\n let _return = null;\n if (this._match(TokenTypes.tokens.arrow)) {\n const attrs = this._attribute();\n _return = this._type_decl();\n if (_return != null)\n _return.attributes = attrs;\n }\n const body = this._compound_statement();\n return new Function(name, args, _return, body);\n }\n _compound_statement() {\n // brace_left statement* brace_right\n const statements = [];\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for block.\");\n while (!this._check(TokenTypes.tokens.brace_right)) {\n const statement = this._statement();\n if (statement !== null)\n statements.push(statement);\n }\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for block.\");\n return statements;\n }\n _statement() {\n // semicolon\n // return_statement semicolon\n // if_statement\n // switch_statement\n // loop_statement\n // for_statement\n // func_call_statement semicolon\n // variable_statement semicolon\n // break_statement semicolon\n // continue_statement semicolon\n // continuing_statement compound_statement\n // discard semicolon\n // assignment_statement semicolon\n // compound_statement\n // increment_statement semicolon\n // decrement_statement semicolon\n // static_assert_statement semicolon\n // Ignore any stand-alone semicolons\n while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd())\n ;\n if (this._check(TokenTypes.keywords.if))\n return this._if_statement();\n if (this._check(TokenTypes.keywords.switch))\n return this._switch_statement();\n if (this._check(TokenTypes.keywords.loop))\n return this._loop_statement();\n if (this._check(TokenTypes.keywords.for))\n return this._for_statement();\n if (this._check(TokenTypes.keywords.while))\n return this._while_statement();\n if (this._check(TokenTypes.keywords.continuing))\n return this._continuing_statement();\n if (this._check(TokenTypes.keywords.static_assert))\n return this._static_assert_statement();\n if (this._check(TokenTypes.tokens.brace_left))\n return this._compound_statement();\n let result = null;\n if (this._check(TokenTypes.keywords.return))\n result = this._return_statement();\n else if (this._check([\n TokenTypes.keywords.var,\n TokenTypes.keywords.let,\n TokenTypes.keywords.const,\n ]))\n result = this._variable_statement();\n else if (this._match(TokenTypes.keywords.discard))\n result = new Discard();\n else if (this._match(TokenTypes.keywords.break))\n result = new Break();\n else if (this._match(TokenTypes.keywords.continue))\n result = new Continue();\n else\n result =\n this._increment_decrement_statement() ||\n this._func_call_statement() ||\n this._assignment_statement();\n if (result != null)\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';' after statement.\");\n return result;\n }\n _static_assert_statement() {\n if (!this._match(TokenTypes.keywords.static_assert))\n return null;\n let expression = this._optional_paren_expression();\n return new StaticAssert(expression);\n }\n _while_statement() {\n if (!this._match(TokenTypes.keywords.while))\n return null;\n let condition = this._optional_paren_expression();\n const block = this._compound_statement();\n return new While(condition, block);\n }\n _continuing_statement() {\n if (!this._match(TokenTypes.keywords.continuing))\n return null;\n const block = this._compound_statement();\n return new Continuing(block);\n }\n _for_statement() {\n // for paren_left for_header paren_right compound_statement\n if (!this._match(TokenTypes.keywords.for))\n return null;\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('.\");\n // for_header: (variable_statement assignment_statement func_call_statement)? semicolon short_circuit_or_expression? semicolon (assignment_statement func_call_statement)?\n const init = !this._check(TokenTypes.tokens.semicolon)\n ? this._for_init()\n : null;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n const condition = !this._check(TokenTypes.tokens.semicolon)\n ? this._short_circuit_or_expression()\n : null;\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\n const increment = !this._check(TokenTypes.tokens.paren_right)\n ? this._for_increment()\n : null;\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'.\");\n const body = this._compound_statement();\n return new For(init, condition, increment, body);\n }\n _for_init() {\n // (variable_statement assignment_statement func_call_statement)?\n return (this._variable_statement() ||\n this._func_call_statement() ||\n this._assignment_statement());\n }\n _for_increment() {\n // (assignment_statement func_call_statement increment_statement)?\n return (this._func_call_statement() ||\n this._increment_decrement_statement() ||\n this._assignment_statement());\n }\n _variable_statement() {\n // variable_decl\n // variable_decl equal short_circuit_or_expression\n // let (ident variable_ident_decl) equal short_circuit_or_expression\n // const (ident variable_ident_decl) equal short_circuit_or_expression\n if (this._check(TokenTypes.keywords.var)) {\n const _var = this._variable_decl();\n if (_var === null)\n throw this._error(this._peek(), \"Variable declaration expected.\");\n let value = null;\n if (this._match(TokenTypes.tokens.equal))\n value = this._short_circuit_or_expression();\n return new Var(_var.name, _var.type, _var.storage, _var.access, value);\n }\n if (this._match(TokenTypes.keywords.let)) {\n const name = this._consume(TokenTypes.tokens.ident, \"Expected name for let.\").toString();\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const typeAttrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = typeAttrs;\n }\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for let.\");\n const value = this._short_circuit_or_expression();\n return new Let(name, type, null, null, value);\n }\n if (this._match(TokenTypes.keywords.const)) {\n const name = this._consume(TokenTypes.tokens.ident, \"Expected name for const.\").toString();\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const typeAttrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = typeAttrs;\n }\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for const.\");\n const value = this._short_circuit_or_expression();\n return new Const(name, type, null, null, value);\n }\n return null;\n }\n _increment_decrement_statement() {\n const savedPos = this._current;\n const _var = this._unary_expression();\n if (_var == null)\n return null;\n if (!this._check(TokenTypes.increment_operators)) {\n this._current = savedPos;\n return null;\n }\n const token = this._consume(TokenTypes.increment_operators, \"Expected increment operator\");\n return new Increment(token.type === TokenTypes.tokens.plus_plus\n ? IncrementOperator.increment\n : IncrementOperator.decrement, _var);\n }\n _assignment_statement() {\n // (unary_expression underscore) equal short_circuit_or_expression\n let _var = null;\n if (this._check(TokenTypes.tokens.brace_right))\n return null;\n let isUnderscore = this._match(TokenTypes.tokens.underscore);\n if (!isUnderscore)\n _var = this._unary_expression();\n if (!isUnderscore && _var == null)\n return null;\n const type = this._consume(TokenTypes.assignment_operators, \"Expected assignment operator.\");\n const value = this._short_circuit_or_expression();\n return new Assign(AssignOperator.parse(type.lexeme), _var, value);\n }\n _func_call_statement() {\n // ident argument_expression_list\n if (!this._check(TokenTypes.tokens.ident))\n return null;\n const savedPos = this._current;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected function name.\");\n const args = this._argument_expression_list();\n if (args === null) {\n this._current = savedPos;\n return null;\n }\n return new Call(name.lexeme, args);\n }\n _loop_statement() {\n // loop brace_left statement* continuing_statement? brace_right\n if (!this._match(TokenTypes.keywords.loop))\n return null;\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for loop.\");\n // statement*\n const statements = [];\n let statement = this._statement();\n while (statement !== null) {\n if (Array.isArray(statement)) {\n for (let s of statement) {\n statements.push(s);\n }\n }\n else {\n statements.push(statement);\n }\n statement = this._statement();\n }\n // continuing_statement: continuing compound_statement\n let continuing = null;\n if (this._match(TokenTypes.keywords.continuing))\n continuing = this._compound_statement();\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for loop.\");\n return new Loop(statements, continuing);\n }\n _switch_statement() {\n // switch optional_paren_expression brace_left switch_body+ brace_right\n if (!this._match(TokenTypes.keywords.switch))\n return null;\n const condition = this._optional_paren_expression();\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for switch.\");\n const body = this._switch_body();\n if (body == null || body.length == 0)\n throw this._error(this._previous(), \"Expected 'case' or 'default'.\");\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for switch.\");\n return new Switch(condition, body);\n }\n _switch_body() {\n // case case_selectors colon brace_left case_body? brace_right\n // default colon brace_left case_body? brace_right\n const cases = [];\n if (this._match(TokenTypes.keywords.case)) {\n const selector = this._case_selectors();\n this._match(TokenTypes.tokens.colon); // colon is optional\n this._consume(TokenTypes.tokens.brace_left, \"Exected '{' for switch case.\");\n const body = this._case_body();\n this._consume(TokenTypes.tokens.brace_right, \"Exected '}' for switch case.\");\n cases.push(new Case(selector, body));\n }\n if (this._match(TokenTypes.keywords.default)) {\n this._match(TokenTypes.tokens.colon); // colon is optional\n this._consume(TokenTypes.tokens.brace_left, \"Exected '{' for switch default.\");\n const body = this._case_body();\n this._consume(TokenTypes.tokens.brace_right, \"Exected '}' for switch default.\");\n cases.push(new Default(body));\n }\n if (this._check([TokenTypes.keywords.default, TokenTypes.keywords.case])) {\n const _cases = this._switch_body();\n cases.push(_cases[0]);\n }\n return cases;\n }\n _case_selectors() {\n var _a, _b, _c, _d;\n // const_literal (comma const_literal)* comma?\n const selectors = [\n (_b = (_a = this._shift_expression()) === null || _a === void 0 ? void 0 : _a.evaluate(this._context).toString()) !== null && _b !== void 0 ? _b : \"\",\n ];\n while (this._match(TokenTypes.tokens.comma)) {\n selectors.push((_d = (_c = this._shift_expression()) === null || _c === void 0 ? void 0 : _c.evaluate(this._context).toString()) !== null && _d !== void 0 ? _d : \"\");\n }\n return selectors;\n }\n _case_body() {\n // statement case_body?\n // fallthrough semicolon\n if (this._match(TokenTypes.keywords.fallthrough)) {\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\n return [];\n }\n let statement = this._statement();\n if (statement == null)\n return [];\n if (!(statement instanceof Array)) {\n statement = [statement];\n }\n const nextStatement = this._case_body();\n if (nextStatement.length == 0)\n return statement;\n return [...statement, nextStatement[0]];\n }\n _if_statement() {\n // if optional_paren_expression compound_statement elseif_statement? else_statement?\n if (!this._match(TokenTypes.keywords.if))\n return null;\n const condition = this._optional_paren_expression();\n const block = this._compound_statement();\n let elseif = [];\n if (this._match_elseif()) {\n elseif = this._elseif_statement(elseif);\n }\n let _else = null;\n if (this._match(TokenTypes.keywords.else))\n _else = this._compound_statement();\n return new If(condition, block, elseif, _else);\n }\n _match_elseif() {\n if (this._tokens[this._current].type === TokenTypes.keywords.else &&\n this._tokens[this._current + 1].type === TokenTypes.keywords.if) {\n this._advance();\n this._advance();\n return true;\n }\n return false;\n }\n _elseif_statement(elseif = []) {\n // else_if optional_paren_expression compound_statement elseif_statement?\n const condition = this._optional_paren_expression();\n const block = this._compound_statement();\n elseif.push(new ElseIf(condition, block));\n if (this._match_elseif()) {\n this._elseif_statement(elseif);\n }\n return elseif;\n }\n _return_statement() {\n // return short_circuit_or_expression?\n if (!this._match(TokenTypes.keywords.return))\n return null;\n const value = this._short_circuit_or_expression();\n return new Return(value);\n }\n _short_circuit_or_expression() {\n // short_circuit_and_expression\n // short_circuit_or_expression or_or short_circuit_and_expression\n let expr = this._short_circuit_and_expr();\n while (this._match(TokenTypes.tokens.or_or)) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._short_circuit_and_expr());\n }\n return expr;\n }\n _short_circuit_and_expr() {\n // inclusive_or_expression\n // short_circuit_and_expression and_and inclusive_or_expression\n let expr = this._inclusive_or_expression();\n while (this._match(TokenTypes.tokens.and_and)) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._inclusive_or_expression());\n }\n return expr;\n }\n _inclusive_or_expression() {\n // exclusive_or_expression\n // inclusive_or_expression or exclusive_or_expression\n let expr = this._exclusive_or_expression();\n while (this._match(TokenTypes.tokens.or)) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._exclusive_or_expression());\n }\n return expr;\n }\n _exclusive_or_expression() {\n // and_expression\n // exclusive_or_expression xor and_expression\n let expr = this._and_expression();\n while (this._match(TokenTypes.tokens.xor)) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._and_expression());\n }\n return expr;\n }\n _and_expression() {\n // equality_expression\n // and_expression and equality_expression\n let expr = this._equality_expression();\n while (this._match(TokenTypes.tokens.and)) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._equality_expression());\n }\n return expr;\n }\n _equality_expression() {\n // relational_expression\n // relational_expression equal_equal relational_expression\n // relational_expression not_equal relational_expression\n const expr = this._relational_expression();\n if (this._match([TokenTypes.tokens.equal_equal, TokenTypes.tokens.not_equal])) {\n return new BinaryOperator(this._previous().toString(), expr, this._relational_expression());\n }\n return expr;\n }\n _relational_expression() {\n // shift_expression\n // relational_expression less_than shift_expression\n // relational_expression greater_than shift_expression\n // relational_expression less_than_equal shift_expression\n // relational_expression greater_than_equal shift_expression\n let expr = this._shift_expression();\n while (this._match([\n TokenTypes.tokens.less_than,\n TokenTypes.tokens.greater_than,\n TokenTypes.tokens.less_than_equal,\n TokenTypes.tokens.greater_than_equal,\n ])) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._shift_expression());\n }\n return expr;\n }\n _shift_expression() {\n // additive_expression\n // shift_expression shift_left additive_expression\n // shift_expression shift_right additive_expression\n let expr = this._additive_expression();\n while (this._match([TokenTypes.tokens.shift_left, TokenTypes.tokens.shift_right])) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._additive_expression());\n }\n return expr;\n }\n _additive_expression() {\n // multiplicative_expression\n // additive_expression plus multiplicative_expression\n // additive_expression minus multiplicative_expression\n let expr = this._multiplicative_expression();\n while (this._match([TokenTypes.tokens.plus, TokenTypes.tokens.minus])) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._multiplicative_expression());\n }\n return expr;\n }\n _multiplicative_expression() {\n // unary_expression\n // multiplicative_expression star unary_expression\n // multiplicative_expression forward_slash unary_expression\n // multiplicative_expression modulo unary_expression\n let expr = this._unary_expression();\n while (this._match([\n TokenTypes.tokens.star,\n TokenTypes.tokens.forward_slash,\n TokenTypes.tokens.modulo,\n ])) {\n expr = new BinaryOperator(this._previous().toString(), expr, this._unary_expression());\n }\n return expr;\n }\n _unary_expression() {\n // singular_expression\n // minus unary_expression\n // bang unary_expression\n // tilde unary_expression\n // star unary_expression\n // and unary_expression\n if (this._match([\n TokenTypes.tokens.minus,\n TokenTypes.tokens.bang,\n TokenTypes.tokens.tilde,\n TokenTypes.tokens.star,\n TokenTypes.tokens.and,\n ])) {\n return new UnaryOperator(this._previous().toString(), this._unary_expression());\n }\n return this._singular_expression();\n }\n _singular_expression() {\n // primary_expression postfix_expression ?\n const expr = this._primary_expression();\n const p = this._postfix_expression();\n if (p)\n expr.postfix = p;\n return expr;\n }\n _postfix_expression() {\n // bracket_left short_circuit_or_expression bracket_right postfix_expression?\n if (this._match(TokenTypes.tokens.bracket_left)) {\n const expr = this._short_circuit_or_expression();\n this._consume(TokenTypes.tokens.bracket_right, \"Expected ']'.\");\n const p = this._postfix_expression();\n if (p)\n expr.postfix = p;\n return expr;\n }\n // period ident postfix_expression?\n if (this._match(TokenTypes.tokens.period)) {\n const name = this._consume(TokenTypes.tokens.ident, \"Expected member name.\");\n const p = this._postfix_expression();\n const expr = new StringExpr(name.lexeme);\n if (p)\n expr.postfix = p;\n return expr;\n }\n return null;\n }\n _getStruct(name) {\n if (this._context.aliases.has(name)) {\n const alias = this._context.aliases.get(name).type;\n return alias;\n }\n if (this._context.structs.has(name)) {\n const struct = this._context.structs.get(name);\n return struct;\n }\n return null;\n }\n _primary_expression() {\n // ident argument_expression_list?\n if (this._match(TokenTypes.tokens.ident)) {\n const name = this._previous().toString();\n if (this._check(TokenTypes.tokens.paren_left)) {\n const args = this._argument_expression_list();\n const struct = this._getStruct(name);\n if (struct != null) {\n return new CreateExpr(struct, args);\n }\n return new CallExpr(name, args);\n }\n if (this._context.constants.has(name)) {\n const c = this._context.constants.get(name);\n return new ConstExpr(name, c.value);\n }\n return new VariableExpr(name);\n }\n // const_literal\n if (this._match(TokenTypes.const_literal)) {\n return new LiteralExpr(parseFloat(this._previous().toString()));\n }\n // paren_expression\n if (this._check(TokenTypes.tokens.paren_left)) {\n return this._paren_expression();\n }\n // bitcast less_than type_decl greater_than paren_expression\n if (this._match(TokenTypes.keywords.bitcast)) {\n this._consume(TokenTypes.tokens.less_than, \"Expected '<'.\");\n const type = this._type_decl();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>'.\");\n const value = this._paren_expression();\n return new BitcastExpr(type, value);\n }\n // type_decl argument_expression_list\n const type = this._type_decl();\n const args = this._argument_expression_list();\n return new TypecastExpr(type, args);\n }\n _argument_expression_list() {\n // paren_left ((short_circuit_or_expression comma)* short_circuit_or_expression comma?)? paren_right\n if (!this._match(TokenTypes.tokens.paren_left))\n return null;\n const args = [];\n do {\n if (this._check(TokenTypes.tokens.paren_right))\n break;\n const arg = this._short_circuit_or_expression();\n args.push(arg);\n } while (this._match(TokenTypes.tokens.comma));\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')' for agument list\");\n return args;\n }\n _optional_paren_expression() {\n // [paren_left] short_circuit_or_expression [paren_right]\n this._match(TokenTypes.tokens.paren_left);\n const expr = this._short_circuit_or_expression();\n this._match(TokenTypes.tokens.paren_right);\n return new GroupingExpr([expr]);\n }\n _paren_expression() {\n // paren_left short_circuit_or_expression paren_right\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('.\");\n const expr = this._short_circuit_or_expression();\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'.\");\n return new GroupingExpr([expr]);\n }\n _struct_decl() {\n // attribute* struct ident struct_body_decl\n if (!this._match(TokenTypes.keywords.struct))\n return null;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected name for struct.\").toString();\n // struct_body_decl: brace_left (struct_member comma)* struct_member comma? brace_right\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for struct body.\");\n const members = [];\n while (!this._check(TokenTypes.tokens.brace_right)) {\n // struct_member: attribute* variable_ident_decl\n const memberAttrs = this._attribute();\n const memberName = this._consume(TokenTypes.tokens.ident, \"Expected variable name.\").toString();\n this._consume(TokenTypes.tokens.colon, \"Expected ':' for struct member type.\");\n const typeAttrs = this._attribute();\n const memberType = this._type_decl();\n if (memberType != null)\n memberType.attributes = typeAttrs;\n if (!this._check(TokenTypes.tokens.brace_right))\n this._consume(TokenTypes.tokens.comma, \"Expected ',' for struct member.\");\n else\n this._match(TokenTypes.tokens.comma); // trailing comma optional.\n members.push(new Member(memberName, memberType, memberAttrs));\n }\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' after struct body.\");\n const structNode = new Struct(name, members);\n this._context.structs.set(name, structNode);\n return structNode;\n }\n _global_variable_decl() {\n // attribute* variable_decl (equal const_expression)?\n const _var = this._variable_decl();\n if (_var && this._match(TokenTypes.tokens.equal))\n _var.value = this._const_expression();\n return _var;\n }\n _override_variable_decl() {\n // attribute* override_decl (equal const_expression)?\n const _override = this._override_decl();\n if (_override && this._match(TokenTypes.tokens.equal))\n _override.value = this._const_expression();\n return _override;\n }\n _global_const_decl() {\n // attribute* const (ident variable_ident_decl) global_const_initializer?\n if (!this._match(TokenTypes.keywords.const))\n return null;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected variable name\");\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const attrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = attrs;\n }\n let value = null;\n if (this._match(TokenTypes.tokens.equal)) {\n const valueExpr = this._short_circuit_or_expression();\n if (valueExpr instanceof CreateExpr) {\n value = valueExpr;\n }\n else if (valueExpr instanceof ConstExpr &&\n valueExpr.initializer instanceof CreateExpr) {\n value = valueExpr.initializer;\n }\n else {\n try {\n const constValue = valueExpr.evaluate(this._context);\n value = new LiteralExpr(constValue);\n }\n catch (_a) {\n value = valueExpr;\n }\n }\n }\n const c = new Const(name.toString(), type, \"\", \"\", value);\n this._context.constants.set(c.name, c);\n return c;\n }\n _global_let_decl() {\n // attribute* let (ident variable_ident_decl) global_const_initializer?\n if (!this._match(TokenTypes.keywords.let))\n return null;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected variable name\");\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const attrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = attrs;\n }\n let value = null;\n if (this._match(TokenTypes.tokens.equal)) {\n value = this._const_expression();\n }\n return new Let(name.toString(), type, \"\", \"\", value);\n }\n _const_expression() {\n // type_decl paren_left ((const_expression comma)* const_expression comma?)? paren_right\n // const_literal\n if (this._match(TokenTypes.const_literal))\n return new StringExpr(this._previous().toString());\n const type = this._type_decl();\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('.\");\n let args = [];\n while (!this._check(TokenTypes.tokens.paren_right)) {\n args.push(this._const_expression());\n if (!this._check(TokenTypes.tokens.comma))\n break;\n this._advance();\n }\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'.\");\n return new CreateExpr(type, args);\n }\n _variable_decl() {\n // var variable_qualifier? (ident variable_ident_decl)\n if (!this._match(TokenTypes.keywords.var))\n return null;\n // variable_qualifier: less_than storage_class (comma access_mode)? greater_than\n let storage = \"\";\n let access = \"\";\n if (this._match(TokenTypes.tokens.less_than)) {\n storage = this._consume(TokenTypes.storage_class, \"Expected storage_class.\").toString();\n if (this._match(TokenTypes.tokens.comma))\n access = this._consume(TokenTypes.access_mode, \"Expected access_mode.\").toString();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>'.\");\n }\n const name = this._consume(TokenTypes.tokens.ident, \"Expected variable name\");\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const attrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = attrs;\n }\n return new Var(name.toString(), type, storage, access, null);\n }\n _override_decl() {\n // override (ident variable_ident_decl)\n if (!this._match(TokenTypes.keywords.override))\n return null;\n const name = this._consume(TokenTypes.tokens.ident, \"Expected variable name\");\n let type = null;\n if (this._match(TokenTypes.tokens.colon)) {\n const attrs = this._attribute();\n type = this._type_decl();\n if (type != null)\n type.attributes = attrs;\n }\n return new Override(name.toString(), type, null);\n }\n _enable_directive() {\n // enable ident semicolon\n const name = this._consume(TokenTypes.tokens.ident, \"identity expected.\");\n return new Enable(name.toString());\n }\n _type_alias() {\n // type ident equal type_decl\n const name = this._consume(TokenTypes.tokens.ident, \"identity expected.\");\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for type alias.\");\n let aliasType = this._type_decl();\n if (aliasType === null) {\n throw this._error(this._peek(), \"Expected Type for Alias.\");\n }\n if (this._context.aliases.has(aliasType.name)) {\n aliasType = this._context.aliases.get(aliasType.name).type;\n }\n const aliasNode = new Alias(name.toString(), aliasType);\n this._context.aliases.set(aliasNode.name, aliasNode);\n return aliasNode;\n }\n _type_decl() {\n // ident\n // bool\n // float32\n // int32\n // uint32\n // vec2 less_than type_decl greater_than\n // vec3 less_than type_decl greater_than\n // vec4 less_than type_decl greater_than\n // mat2x2 less_than type_decl greater_than\n // mat2x3 less_than type_decl greater_than\n // mat2x4 less_than type_decl greater_than\n // mat3x2 less_than type_decl greater_than\n // mat3x3 less_than type_decl greater_than\n // mat3x4 less_than type_decl greater_than\n // mat4x2 less_than type_decl greater_than\n // mat4x3 less_than type_decl greater_than\n // mat4x4 less_than type_decl greater_than\n // atomic less_than type_decl greater_than\n // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than\n // array_type_decl\n // texture_sampler_types\n if (this._check([\n TokenTypes.tokens.ident,\n ...TokenTypes.texel_format,\n TokenTypes.keywords.bool,\n TokenTypes.keywords.f32,\n TokenTypes.keywords.i32,\n TokenTypes.keywords.u32,\n ])) {\n const type = this._advance();\n const typeName = type.toString();\n if (this._context.structs.has(typeName)) {\n return this._context.structs.get(typeName);\n }\n if (this._context.aliases.has(typeName)) {\n return this._context.aliases.get(typeName).type;\n }\n return new Type(type.toString());\n }\n // texture_sampler_types\n let type = this._texture_sampler_types();\n if (type)\n return type;\n if (this._check(TokenTypes.template_types)) {\n let type = this._advance().toString();\n let format = null;\n let access = null;\n if (this._match(TokenTypes.tokens.less_than)) {\n format = this._type_decl();\n access = null;\n if (this._match(TokenTypes.tokens.comma))\n access = this._consume(TokenTypes.access_mode, \"Expected access_mode for pointer\").toString();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for type.\");\n }\n return new TemplateType(type, format, access);\n }\n // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than\n if (this._match(TokenTypes.keywords.ptr)) {\n let pointer = this._previous().toString();\n this._consume(TokenTypes.tokens.less_than, \"Expected '<' for pointer.\");\n const storage = this._consume(TokenTypes.storage_class, \"Expected storage_class for pointer\");\n this._consume(TokenTypes.tokens.comma, \"Expected ',' for pointer.\");\n const decl = this._type_decl();\n let access = null;\n if (this._match(TokenTypes.tokens.comma))\n access = this._consume(TokenTypes.access_mode, \"Expected access_mode for pointer\").toString();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for pointer.\");\n return new PointerType(pointer, storage.toString(), decl, access);\n }\n // The following type_decl's have an optional attribyte_list*\n const attrs = this._attribute();\n // attribute* array\n // attribute* array less_than type_decl (comma element_count_expression)? greater_than\n if (this._match(TokenTypes.keywords.array)) {\n let format = null;\n let countInt = -1;\n const array = this._previous();\n if (this._match(TokenTypes.tokens.less_than)) {\n format = this._type_decl();\n if (this._context.aliases.has(format.name)) {\n format = this._context.aliases.get(format.name).type;\n }\n let count = \"\";\n if (this._match(TokenTypes.tokens.comma)) {\n let c = this._shift_expression();\n count = c.evaluate(this._context).toString();\n }\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for array.\");\n countInt = count ? parseInt(count) : 0;\n }\n return new ArrayType(array.toString(), attrs, format, countInt);\n }\n return null;\n }\n _texture_sampler_types() {\n // sampler_type\n if (this._match(TokenTypes.sampler_type))\n return new SamplerType(this._previous().toString(), null, null);\n // depth_texture_type\n if (this._match(TokenTypes.depth_texture_type))\n return new SamplerType(this._previous().toString(), null, null);\n // sampled_texture_type less_than type_decl greater_than\n // multisampled_texture_type less_than type_decl greater_than\n if (this._match(TokenTypes.sampled_texture_type) ||\n this._match(TokenTypes.multisampled_texture_type)) {\n const sampler = this._previous();\n this._consume(TokenTypes.tokens.less_than, \"Expected '<' for sampler type.\");\n const format = this._type_decl();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for sampler type.\");\n return new SamplerType(sampler.toString(), format, null);\n }\n // storage_texture_type less_than texel_format comma access_mode greater_than\n if (this._match(TokenTypes.storage_texture_type)) {\n const sampler = this._previous();\n this._consume(TokenTypes.tokens.less_than, \"Expected '<' for sampler type.\");\n const format = this._consume(TokenTypes.texel_format, \"Invalid texel format.\").toString();\n this._consume(TokenTypes.tokens.comma, \"Expected ',' after texel format.\");\n const access = this._consume(TokenTypes.access_mode, \"Expected access mode for storage texture type.\").toString();\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for sampler type.\");\n return new SamplerType(sampler.toString(), format, access);\n }\n return null;\n }\n _attribute() {\n // attr ident paren_left (literal_or_ident comma)* literal_or_ident paren_right\n // attr ident\n let attributes = [];\n while (this._match(TokenTypes.tokens.attr)) {\n const name = this._consume(TokenTypes.attribute_name, \"Expected attribute name\");\n const attr = new Attribute(name.toString(), null);\n if (this._match(TokenTypes.tokens.paren_left)) {\n // literal_or_ident\n attr.value = this._consume(TokenTypes.literal_or_ident, \"Expected attribute value\").toString();\n if (this._check(TokenTypes.tokens.comma)) {\n this._advance();\n do {\n const v = this._consume(TokenTypes.literal_or_ident, \"Expected attribute value\").toString();\n if (!(attr.value instanceof Array)) {\n attr.value = [attr.value];\n }\n attr.value.push(v);\n } while (this._match(TokenTypes.tokens.comma));\n }\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'\");\n }\n attributes.push(attr);\n }\n // Deprecated:\n // attr_left (attribute comma)* attribute attr_right\n while (this._match(TokenTypes.tokens.attr_left)) {\n if (!this._check(TokenTypes.tokens.attr_right)) {\n do {\n const name = this._consume(TokenTypes.attribute_name, \"Expected attribute name\");\n const attr = new Attribute(name.toString(), null);\n if (this._match(TokenTypes.tokens.paren_left)) {\n // literal_or_ident\n attr.value = [\n this._consume(TokenTypes.literal_or_ident, \"Expected attribute value\").toString(),\n ];\n if (this._check(TokenTypes.tokens.comma)) {\n this._advance();\n do {\n const v = this._consume(TokenTypes.literal_or_ident, \"Expected attribute value\").toString();\n attr.value.push(v);\n } while (this._match(TokenTypes.tokens.comma));\n }\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'\");\n }\n attributes.push(attr);\n } while (this._match(TokenTypes.tokens.comma));\n }\n // Consume ]]\n this._consume(TokenTypes.tokens.attr_right, \"Expected ']]' after attribute declarations\");\n }\n if (attributes.length == 0)\n return null;\n return attributes;\n }\n}\n/**\n * @author Brendan Duncan / https://github.com/brendan-duncan\n */\nclass TypeInfo {\n constructor(name, attributes) {\n this.name = name;\n this.attributes = attributes;\n this.size = 0;\n }\n get isArray() {\n return false;\n }\n get isStruct() {\n return false;\n }\n get isTemplate() {\n return false;\n }\n}\nclass MemberInfo {\n constructor(name, type, attributes) {\n this.name = name;\n this.type = type;\n this.attributes = attributes;\n this.offset = 0;\n this.size = 0;\n }\n get isArray() {\n return this.type.isArray;\n }\n get isStruct() {\n return this.type.isStruct;\n }\n get isTemplate() {\n return this.type.isTemplate;\n }\n get align() {\n return this.type.isStruct ? this.type.align : 0;\n }\n get members() {\n return this.type.isStruct ? this.type.members : null;\n }\n get format() {\n return this.type.isArray\n ? this.type.format\n : this.type.isTemplate\n ? this.type.format\n : null;\n }\n get count() {\n return this.type.isArray ? this.type.count : 0;\n }\n get stride() {\n return this.type.isArray ? this.type.stride : this.size;\n }\n}\nclass StructInfo extends TypeInfo {\n constructor(name, attributes) {\n super(name, attributes);\n this.members = [];\n this.align = 0;\n }\n get isStruct() {\n return true;\n }\n}\nclass ArrayInfo extends TypeInfo {\n constructor(name, attributes) {\n super(name, attributes);\n this.count = 0;\n this.stride = 0;\n }\n get isArray() {\n return true;\n }\n}\nclass TemplateInfo extends TypeInfo {\n constructor(name, format, attributes, access) {\n super(name, attributes);\n this.format = format;\n this.access = access;\n }\n get isTemplate() {\n return true;\n }\n}\nvar ResourceType;\n(function (ResourceType) {\n ResourceType[ResourceType[\"Uniform\"] = 0] = \"Uniform\";\n ResourceType[ResourceType[\"Storage\"] = 1] = \"Storage\";\n ResourceType[ResourceType[\"Texture\"] = 2] = \"Texture\";\n ResourceType[ResourceType[\"Sampler\"] = 3] = \"Sampler\";\n ResourceType[ResourceType[\"StorageTexture\"] = 4] = \"StorageTexture\";\n})(ResourceType || (ResourceType = {}));\nclass VariableInfo {\n constructor(name, type, group, binding, attributes, resourceType, access) {\n this.name = name;\n this.type = type;\n this.group = group;\n this.binding = binding;\n this.attributes = attributes;\n this.resourceType = resourceType;\n this.access = access;\n }\n get isArray() {\n return this.type.isArray;\n }\n get isStruct() {\n return this.type.isStruct;\n }\n get isTemplate() {\n return this.type.isTemplate;\n }\n get size() {\n return this.type.size;\n }\n get align() {\n return this.type.isStruct ? this.type.align : 0;\n }\n get members() {\n return this.type.isStruct ? this.type.members : null;\n }\n get format() {\n return this.type.isArray\n ? this.type.format\n : this.type.isTemplate\n ? this.type.format\n : null;\n }\n get count() {\n return this.type.isArray ? this.type.count : 0;\n }\n get stride() {\n return this.type.isArray ? this.type.stride : this.size;\n }\n}\nclass AliasInfo {\n constructor(name, type) {\n this.name = name;\n this.type = type;\n }\n}\nclass _TypeSize {\n constructor(align, size) {\n this.align = align;\n this.size = size;\n }\n}\nclass InputInfo {\n constructor(name, type, locationType, location) {\n this.name = name;\n this.type = type;\n this.locationType = locationType;\n this.location = location;\n this.interpolation = null;\n }\n}\nclass OutputInfo {\n constructor(name, type, locationType, location) {\n this.name = name;\n this.type = type;\n this.locationType = locationType;\n this.location = location;\n }\n}\nclass FunctionInfo {\n constructor(name, stage = null) {\n this.stage = null;\n this.inputs = [];\n this.outputs = [];\n this.name = name;\n this.stage = stage;\n }\n}\nclass EntryFunctions {\n constructor() {\n this.vertex = [];\n this.fragment = [];\n this.compute = [];\n }\n}\nclass OverrideInfo {\n constructor(name, type, attributes, id) {\n this.name = name;\n this.type = type;\n this.attributes = attributes;\n this.id = id;\n }\n}\nclass WgslReflect {\n constructor(code) {\n /// All top-level uniform vars in the shader.\n this.uniforms = [];\n /// All top-level storage vars in the shader.\n this.storage = [];\n /// All top-level texture vars in the shader;\n this.textures = [];\n // All top-level sampler vars in the shader.\n this.samplers = [];\n /// All top-level type aliases in the shader.\n this.aliases = [];\n /// All top-level overrides in the shader.\n this.overrides = [];\n /// All top-level structs in the shader.\n this.structs = [];\n /// All entry functions in the shader: vertex, fragment, and/or compute.\n this.entry = new EntryFunctions();\n this._types = new Map();\n if (code) {\n this.update(code);\n }\n }\n _isStorageTexture(type) {\n return (type.name == \"texture_storage_1d\" ||\n type.name == \"texture_storage_2d\" ||\n type.name == \"texture_storage_2d_array\" ||\n type.name == \"texture_storage_3d\");\n }\n update(code) {\n const parser = new WgslParser();\n const ast = parser.parse(code);\n for (const node of ast) {\n if (node instanceof Struct) {\n const info = this._getTypeInfo(node, null);\n if (info instanceof StructInfo) {\n this.structs.push(info);\n }\n continue;\n }\n if (node instanceof Alias) {\n this.aliases.push(this._getAliasInfo(node));\n continue;\n }\n if (node instanceof Override) {\n const v = node;\n const id = this._getAttributeNum(v.attributes, \"id\", 0);\n const type = v.type != null ? this._getTypeInfo(v.type, v.attributes) : null;\n this.overrides.push(new OverrideInfo(v.name, type, v.attributes, id));\n continue;\n }\n if (this._isUniformVar(node)) {\n const v = node;\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\n const type = this._getTypeInfo(v.type, v.attributes);\n const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, ResourceType.Uniform, v.access);\n this.uniforms.push(varInfo);\n continue;\n }\n if (this._isStorageVar(node)) {\n const v = node;\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\n const type = this._getTypeInfo(v.type, v.attributes);\n const isStorageTexture = this._isStorageTexture(type);\n const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, isStorageTexture ? ResourceType.StorageTexture : ResourceType.Storage, v.access);\n this.storage.push(varInfo);\n continue;\n }\n if (this._isTextureVar(node)) {\n const v = node;\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\n const type = this._getTypeInfo(v.type, v.attributes);\n const isStorageTexture = this._isStorageTexture(type);\n const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, isStorageTexture ? ResourceType.StorageTexture : ResourceType.Texture, v.access);\n if (isStorageTexture) {\n this.storage.push(varInfo);\n }\n else {\n this.textures.push(varInfo);\n }\n continue;\n }\n if (this._isSamplerVar(node)) {\n const v = node;\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\n const type = this._getTypeInfo(v.type, v.attributes);\n const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, ResourceType.Sampler, v.access);\n this.samplers.push(varInfo);\n continue;\n }\n if (node instanceof Function) {\n const vertexStage = this._getAttribute(node, \"vertex\");\n const fragmentStage = this._getAttribute(node, \"fragment\");\n const computeStage = this._getAttribute(node, \"compute\");\n const stage = vertexStage || fragmentStage || computeStage;\n if (stage) {\n const fn = new FunctionInfo(node.name, stage.name);\n fn.inputs = this._getInputs(node.args);\n fn.outputs = this._getOutputs(node.returnType);\n this.entry[stage.name].push(fn);\n }\n continue;\n }\n }\n }\n getBindGroups() {\n const groups = [];\n function _makeRoom(group, binding) {\n if (group >= groups.length)\n groups.length = group + 1;\n if (groups[group] === undefined)\n groups[group] = [];\n if (binding >= groups[group].length)\n groups[group].length = binding + 1;\n }\n for (const u of this.uniforms) {\n _makeRoom(u.group, u.binding);\n const group = groups[u.group];\n group[u.binding] = u;\n }\n for (const u of this.storage) {\n _makeRoom(u.group, u.binding);\n const group = groups[u.group];\n group[u.binding] = u;\n }\n for (const t of this.textures) {\n _makeRoom(t.group, t.binding);\n const group = groups[t.group];\n group[t.binding] = t;\n }\n for (const t of this.samplers) {\n _makeRoom(t.group, t.binding);\n const group = groups[t.group];\n group[t.binding] = t;\n }\n return groups;\n }\n _getOutputs(type, outputs = undefined) {\n if (outputs === undefined)\n outputs = [];\n if (type instanceof Struct) {\n this._getStructOutputs(type, outputs);\n }\n else {\n const output = this._getOutputInfo(type);\n if (output !== null)\n outputs.push(output);\n }\n return outputs;\n }\n _getStructOutputs(struct, outputs) {\n for (const m of struct.members) {\n if (m.type instanceof Struct) {\n this._getStructOutputs(m.type, outputs);\n }\n else {\n const location = this._getAttribute(m, \"location\") || this._getAttribute(m, \"builtin\");\n if (location !== null) {\n const typeInfo = this._getTypeInfo(m.type, m.type.attributes);\n const locationValue = this._parseInt(location.value);\n const info = new OutputInfo(m.name, typeInfo, location.name, locationValue);\n outputs.push(info);\n }\n }\n }\n }\n _getOutputInfo(type) {\n const location = this._getAttribute(type, \"location\") ||\n this._getAttribute(type, \"builtin\");\n if (location !== null) {\n const typeInfo = this._getTypeInfo(type, type.attributes);\n const locationValue = this._parseInt(location.value);\n const info = new OutputInfo(\"\", typeInfo, location.name, locationValue);\n return info;\n }\n return null;\n }\n _getInputs(args, inputs = undefined) {\n if (inputs === undefined)\n inputs = [];\n for (const arg of args) {\n if (arg.type instanceof Struct) {\n this._getStructInputs(arg.type, inputs);\n }\n else {\n const input = this._getInputInfo(arg);\n if (input !== null)\n inputs.push(input);\n }\n }\n return inputs;\n }\n _getStructInputs(struct, inputs) {\n for (const m of struct.members) {\n if (m.type instanceof Struct) {\n this._getStructInputs(m.type, inputs);\n }\n else {\n const input = this._getInputInfo(m);\n if (input !== null)\n inputs.push(input);\n }\n }\n }\n _getInputInfo(node) {\n const location = this._getAttribute(node, \"location\") ||\n this._getAttribute(node, \"builtin\");\n if (location !== null) {\n const interpolation = this._getAttribute(node, \"interpolation\");\n const type = this._getTypeInfo(node.type, node.attributes);\n const locationValue = this._parseInt(location.value);\n const info = new InputInfo(node.name, type, location.name, locationValue);\n if (interpolation !== null) {\n info.interpolation = this._parseString(interpolation.value);\n }\n return info;\n }\n return null;\n }\n _parseString(s) {\n if (s instanceof Array) {\n s = s[0];\n }\n return s;\n }\n _parseInt(s) {\n if (s instanceof Array) {\n s = s[0];\n }\n const n = parseInt(s);\n return isNaN(n) ? s : n;\n }\n _getAlias(name) {\n for (const a of this.aliases) {\n if (a.name == name)\n return a.type;\n }\n return null;\n }\n _getAliasInfo(node) {\n return new AliasInfo(node.name, this._getTypeInfo(node.type, null));\n }\n _getTypeInfo(type, attributes) {\n if (this._types.has(type)) {\n return this._types.get(type);\n }\n if (type instanceof ArrayType) {\n const a = type;\n const t = this._getTypeInfo(a.format, a.attributes);\n const info = new ArrayInfo(a.name, attributes);\n info.format = t;\n info.count = a.count;\n this._types.set(type, info);\n this._updateTypeInfo(info);\n return info;\n }\n if (type instanceof Struct) {\n const s = type;\n const info = new StructInfo(s.name, attributes);\n for (const m of s.members) {\n const t = this._getTypeInfo(m.type, m.attributes);\n info.members.push(new MemberInfo(m.name, t, m.attributes));\n }\n this._types.set(type, info);\n this._updateTypeInfo(info);\n return info;\n }\n if (type instanceof SamplerType) {\n const s = type;\n const formatIsType = s.format instanceof Type;\n const format = s.format\n ? formatIsType\n ? this._getTypeInfo(s.format, null)\n : new TypeInfo(s.format, null)\n : null;\n const info = new TemplateInfo(s.name, format, attributes, s.access);\n this._types.set(type, info);\n this._updateTypeInfo(info);\n return info;\n }\n if (type instanceof TemplateType) {\n const t = type;\n const format = t.format ? this._getTypeInfo(t.format, null) : null;\n const info = new TemplateInfo(t.name, format, attributes, t.access);\n this._types.set(type, info);\n this._updateTypeInfo(info);\n return info;\n }\n const info = new TypeInfo(type.name, attributes);\n this._types.set(type, info);\n this._updateTypeInfo(info);\n return info;\n }\n _updateTypeInfo(type) {\n var _a, _b;\n const typeSize = this._getTypeSize(type);\n type.size = (_a = typeSize === null || typeSize === void 0 ? void 0 : typeSize.size) !== null && _a !== void 0 ? _a : 0;\n if (type instanceof ArrayInfo) {\n const formatInfo = this._getTypeSize(type[\"format\"]);\n type.stride = (_b = formatInfo === null || formatInfo === void 0 ? void 0 : formatInfo.size) !== null && _b !== void 0 ? _b : 0;\n this._updateTypeInfo(type[\"format\"]);\n }\n if (type instanceof StructInfo) {\n this._updateStructInfo(type);\n }\n }\n _updateStructInfo(struct) {\n var _a;\n let offset = 0;\n let lastSize = 0;\n let lastOffset = 0;\n let structAlign = 0;\n for (let mi = 0, ml = struct.members.length; mi < ml; ++mi) {\n const member = struct.members[mi];\n const sizeInfo = this._getTypeSize(member);\n if (!sizeInfo)\n continue;\n (_a = this._getAlias(member.type.name)) !== null && _a !== void 0 ? _a : member.type;\n const align = sizeInfo.align;\n const size = sizeInfo.size;\n offset = this._roundUp(align, offset + lastSize);\n lastSize = size;\n lastOffset = offset;\n structAlign = Math.max(structAlign, align);\n member.offset = offset;\n member.size = size;\n this._updateTypeInfo(member.type);\n }\n struct.size = this._roundUp(structAlign, lastOffset + lastSize);\n struct.align = structAlign;\n }\n _getTypeSize(type) {\n var _a;\n if (type === null || type === undefined)\n return null;\n const explicitSize = this._getAttributeNum(type.attributes, \"size\", 0);\n const explicitAlign = this._getAttributeNum(type.attributes, \"align\", 0);\n if (type instanceof MemberInfo)\n type = type.type;\n if (type instanceof TypeInfo) {\n const alias = this._getAlias(type.name);\n if (alias !== null) {\n type = alias;\n }\n }\n {\n const info = WgslReflect._typeInfo[type.name];\n if (info !== undefined) {\n const divisor = type[\"format\"] === \"f16\" ? 2 : 1;\n return new _TypeSize(Math.max(explicitAlign, info.align / divisor), Math.max(explicitSize, info.size / divisor));\n }\n }\n {\n const info = WgslReflect._typeInfo[type.name.substring(0, type.name.length - 1)];\n if (info) {\n const divisor = type.name[type.name.length - 1] === \"h\" ? 2 : 1;\n return new _TypeSize(Math.max(explicitAlign, info.align / divisor), Math.max(explicitSize, info.size / divisor));\n }\n }\n if (type instanceof ArrayInfo) {\n let arrayType = type;\n let align = 8;\n let size = 8;\n // Type AlignOf(T) Sizeof(T)\n // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E))\n // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E)) (N determined at runtime)\n //\n // @stride(Q)\n // array AlignOf(E) N * Q\n //\n // @stride(Q)\n // array AlignOf(E) Nruntime * Q\n //const E = type.format.name;\n const E = this._getTypeSize(arrayType.format);\n if (E !== null) {\n size = E.size;\n align = E.align;\n }\n const N = arrayType.count;\n const stride = this._getAttributeNum((_a = type === null || type === void 0 ? void 0 : type.attributes) !== null && _a !== void 0 ? _a : null, \"stride\", this._roundUp(align, size));\n size = N * stride;\n if (explicitSize)\n size = explicitSize;\n return new _TypeSize(Math.max(explicitAlign, align), Math.max(explicitSize, size));\n }\n if (type instanceof StructInfo) {\n let align = 0;\n let size = 0;\n // struct S AlignOf: max(AlignOfMember(S, M1), ... , AlignOfMember(S, MN))\n // SizeOf: roundUp(AlignOf(S), OffsetOfMember(S, L) + SizeOfMember(S, L))\n // Where L is the last member of the structure\n let offset = 0;\n let lastSize = 0;\n let lastOffset = 0;\n for (const m of type.members) {\n const mi = this._getTypeSize(m.type);\n if (mi !== null) {\n align = Math.max(mi.align, align);\n offset = this._roundUp(mi.align, offset + lastSize);\n lastSize = mi.size;\n lastOffset = offset;\n }\n }\n size = this._roundUp(align, lastOffset + lastSize);\n return new _TypeSize(Math.max(explicitAlign, align), Math.max(explicitSize, size));\n }\n return null;\n }\n _isUniformVar(node) {\n return node instanceof Var && node.storage == \"uniform\";\n }\n _isStorageVar(node) {\n return node instanceof Var && node.storage == \"storage\";\n }\n _isTextureVar(node) {\n return (node instanceof Var &&\n node.type !== null &&\n WgslReflect._textureTypes.indexOf(node.type.name) != -1);\n }\n _isSamplerVar(node) {\n return (node instanceof Var &&\n node.type !== null &&\n WgslReflect._samplerTypes.indexOf(node.type.name) != -1);\n }\n _getAttribute(node, name) {\n const obj = node;\n if (!obj || !obj[\"attributes\"])\n return null;\n const attrs = obj[\"attributes\"];\n for (let a of attrs) {\n if (a.name == name)\n return a;\n }\n return null;\n }\n _getAttributeNum(attributes, name, defaultValue) {\n if (attributes === null)\n return defaultValue;\n for (let a of attributes) {\n if (a.name == name) {\n let v = a !== null && a.value !== null ? a.value : defaultValue;\n if (v instanceof Array) {\n v = v[0];\n }\n if (typeof v === \"number\") {\n return v;\n }\n if (typeof v === \"string\") {\n return parseInt(v);\n }\n return defaultValue;\n }\n }\n return defaultValue;\n }\n _roundUp(k, n) {\n return Math.ceil(n / k) * k;\n }\n}\n// Type AlignOf(T) Sizeof(T)\n// i32, u32, or f32 4 4\n// atomic 4 4\n// vec2 8 8\n// vec3 16 12\n// vec4 16 16\n// mat2x2 8 16\n// mat3x2 8 24\n// mat4x2 8 32\n// mat2x3 16 32\n// mat3x3 16 48\n// mat4x3 16 64\n// mat2x4 16 32\n// mat3x4 16 48\n// mat4x4 16 64\nWgslReflect._typeInfo = {\n f16: { align: 2, size: 2 },\n i32: { align: 4, size: 4 },\n u32: { align: 4, size: 4 },\n f32: { align: 4, size: 4 },\n atomic: { align: 4, size: 4 },\n vec2: { align: 8, size: 8 },\n vec3: { align: 16, size: 12 },\n vec4: { align: 16, size: 16 },\n mat2x2: { align: 8, size: 16 },\n mat3x2: { align: 8, size: 24 },\n mat4x2: { align: 8, size: 32 },\n mat2x3: { align: 16, size: 32 },\n mat3x3: { align: 16, size: 48 },\n mat4x3: { align: 16, size: 64 },\n mat2x4: { align: 16, size: 32 },\n mat3x4: { align: 16, size: 48 },\n mat4x4: { align: 16, size: 64 },\n};\nWgslReflect._textureTypes = TokenTypes.any_texture_type.map((t) => {\n return t.name;\n});\nWgslReflect._samplerTypes = TokenTypes.sampler_type.map((t) => {\n return t.name;\n});\nexport { Alias, AliasInfo, Argument, ArrayInfo, ArrayType, Assign, AssignOperator, Attribute, BinaryOperator, BitcastExpr, Break, Call, CallExpr, Case, Const, ConstExpr, Continue, Continuing, CreateExpr, Default, Discard, ElseIf, Enable, EntryFunctions, Expression, For, Function, FunctionInfo, GroupingExpr, If, Increment, IncrementOperator, InputInfo, Let, LiteralExpr, Loop, Member, MemberInfo, Node, Operator, OutputInfo, Override, OverrideInfo, ParseContext, PointerType, ResourceType, Return, SamplerType, Statement, StaticAssert, StringExpr, Struct, StructInfo, Switch, SwitchCase, TemplateInfo, TemplateType, Token, TokenClass, TokenType, TokenTypes, Type, TypeInfo, TypecastExpr, UnaryOperator, Var, VariableExpr, VariableInfo, WgslParser, WgslReflect, WgslScanner, While };\n//# sourceMappingURL=wgsl_reflect.module.js.map\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { WgslReflect } from '../../libs/wgsl-reflect/wgsl_reflect.module.js';\n/**\n * Parse a ShaderLayout from WGSL shader source code.\n * @param source WGSL source code (can contain both @vertex and @fragment entry points)\n * @returns\n */\nexport function getShaderLayoutFromWGSL(source) {\n const shaderLayout = { attributes: [], bindings: [] };\n let parsedWGSL;\n try {\n parsedWGSL = parseWGSL(source);\n }\n catch (error) {\n log.error(error.message)();\n return shaderLayout;\n }\n for (const uniform of parsedWGSL.uniforms) {\n const members = [];\n for (const member of uniform.type.members) {\n members.push({\n name: member.name,\n type: getType(member.type)\n });\n }\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniform.name,\n location: uniform.binding,\n // @ts-expect-error\n group: uniform.group,\n members\n });\n }\n const vertex = parsedWGSL.entry.vertex[0]; // \"main\"\n // Vertex shader inputs\n const attributeCount = vertex?.inputs.length || 0; // inputs to \"main\"\n for (let i = 0; i < attributeCount; i++) {\n const wgslAttribute = vertex.inputs[i];\n // locationType can be \"builtin\"\n if (wgslAttribute.locationType === 'location') {\n const type = getType(wgslAttribute.type);\n shaderLayout.attributes.push({\n name: wgslAttribute.name,\n location: wgslAttribute.location,\n type\n });\n }\n }\n return shaderLayout;\n}\n/** Get a valid shader attribute type string from a wgsl-reflect type */\nfunction getType(type) {\n return type.format ? `${type.name}<${type.format.name}>` : type.name;\n}\nfunction parseWGSL(source) {\n try {\n return new WgslReflect(source);\n }\n catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n let message = 'WGSL parse error';\n if (typeof error === 'object' && error?.message) {\n message += `: ${error.message} `;\n }\n if (typeof error === 'object' && error?.token) {\n message += error.token.line || '';\n }\n throw new Error(message, { cause: error });\n }\n}\n","import { Buffer, uid, assert, getVertexFormatFromAttribute } from '@luma.gl/core';\nexport class GPUGeometry {\n id;\n userData = {};\n /** Determines how vertices are read from the 'vertex' attributes */\n topology;\n bufferLayout = [];\n vertexCount;\n indices;\n attributes;\n constructor(props) {\n this.id = props.id || uid('geometry');\n this.topology = props.topology;\n this.indices = props.indices || null;\n this.attributes = props.attributes;\n this.vertexCount = props.vertexCount;\n this.bufferLayout = props.bufferLayout || [];\n if (this.indices) {\n assert(this.indices.usage === Buffer.INDEX);\n }\n }\n destroy() {\n this.indices?.destroy();\n for (const attribute of Object.values(this.attributes)) {\n attribute.destroy();\n }\n }\n getVertexCount() {\n return this.vertexCount;\n }\n getAttributes() {\n return this.attributes;\n }\n getIndexes() {\n return this.indices;\n }\n _calculateVertexCount(positions) {\n // Assume that positions is a fully packed float32x3 buffer\n const vertexCount = positions.byteLength / 12;\n return vertexCount;\n }\n}\nexport function makeGPUGeometry(device, geometry) {\n if (geometry instanceof GPUGeometry) {\n return geometry;\n }\n const indices = getIndexBufferFromGeometry(device, geometry);\n const { attributes, bufferLayout } = getAttributeBuffersFromGeometry(device, geometry);\n return new GPUGeometry({\n topology: geometry.topology || 'triangle-list',\n bufferLayout,\n vertexCount: geometry.vertexCount,\n indices,\n attributes\n });\n}\nexport function getIndexBufferFromGeometry(device, geometry) {\n if (!geometry.indices) {\n return undefined;\n }\n const data = geometry.indices.value;\n return device.createBuffer({ usage: Buffer.INDEX, data });\n}\nexport function getAttributeBuffersFromGeometry(device, geometry) {\n const bufferLayout = [];\n const attributes = {};\n for (const [attributeName, attribute] of Object.entries(geometry.attributes)) {\n let name = attributeName;\n // TODO Map some GLTF attribute names (is this still needed?)\n switch (attributeName) {\n case 'POSITION':\n name = 'positions';\n break;\n case 'NORMAL':\n name = 'normals';\n break;\n case 'TEXCOORD_0':\n name = 'texCoords';\n break;\n case 'COLOR_0':\n name = 'colors';\n break;\n }\n attributes[name] = device.createBuffer({ data: attribute.value, id: `${attributeName}-buffer` });\n const { value, size, normalized } = attribute;\n bufferLayout.push({ name, format: getVertexFormatFromAttribute(value, size, normalized) });\n }\n const vertexCount = geometry._calculateVertexCount(geometry.attributes, geometry.indices);\n return { attributes, bufferLayout, vertexCount };\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\n// import type {ShaderUniformType, UniformValue, UniformFormat, UniformInfoDevice, Texture, Sampler} from '@luma.gl/core';\nimport { _resolveModules } from '@luma.gl/shadertools';\n/**\n * ShaderInputs holds uniform and binding values for one or more shader modules,\n * - It can generate binary data for any uniform buffer\n * - It can manage a uniform buffer for each block\n * - It can update managed uniform buffers with a single call\n * - It performs some book keeping on what has changed to minimize unnecessary writes to uniform buffers.\n */\nexport class ShaderInputs {\n /**\n * The map of modules\n * @todo should should this include the resolved dependencies?\n */\n modules;\n /** Stores the uniform values for each module */\n moduleUniforms;\n /** Stores the uniform bindings for each module */\n moduleBindings;\n /** Tracks if uniforms have changed */\n moduleUniformsChanged;\n /**\n * Create a new UniformStore instance\n * @param modules\n */\n constructor(modules) {\n // Extract modules with dependencies\n const resolvedModules = _resolveModules(Object.values(modules).filter(module => module.dependencies));\n for (const resolvedModule of resolvedModules) {\n // @ts-ignore\n modules[resolvedModule.name] = resolvedModule;\n }\n log.log(1, 'Creating ShaderInputs with modules', Object.keys(modules))();\n // Store the module definitions and create storage for uniform values and binding values, per module\n this.modules = modules;\n this.moduleUniforms = {};\n this.moduleBindings = {};\n // Initialize the modules\n for (const [name, module] of Object.entries(modules)) {\n const moduleName = name;\n // Get default uniforms from module\n this.moduleUniforms[moduleName] = module.defaultUniforms || {};\n this.moduleBindings[moduleName] = {};\n }\n }\n /** Destroy */\n destroy() { }\n /**\n * Set module props\n */\n setProps(props) {\n for (const name of Object.keys(props)) {\n const moduleName = name;\n const moduleProps = props[moduleName];\n const module = this.modules[moduleName];\n if (!module) {\n // Ignore props for unregistered modules\n log.warn(`Module ${name} not found`)();\n continue; // eslint-disable-line no-continue\n }\n const oldUniforms = this.moduleUniforms[moduleName];\n const uniforms = module.getUniforms?.(moduleProps, this.moduleUniforms[moduleName]) || moduleProps;\n // console.error(uniforms)\n this.moduleUniforms[moduleName] = { ...oldUniforms, ...uniforms };\n // this.moduleUniformsChanged ||= moduleName;\n // console.log(`setProps(${String(moduleName)}`, moduleName, this.moduleUniforms[moduleName])\n // TODO - Get Module bindings\n // const bindings = module.getBindings?.(moduleProps);\n // this.moduleUniforms[moduleName] = bindings;\n }\n }\n /** Merges all bindings for the shader (from the various modules) */\n // getUniformBlocks(): Record {\n // return this.moduleUniforms;\n // }\n /**\n * Return the map of modules\n * @todo should should this include the resolved dependencies?\n */\n getModules() {\n return Object.values(this.modules);\n }\n /** Get all uniform values for all modules */\n getUniformValues() {\n return this.moduleUniforms;\n }\n /** Merges all bindings for the shader (from the various modules) */\n getBindings() {\n const bindings = {};\n for (const moduleBindings of Object.values(this.moduleBindings)) {\n Object.assign(bindings, moduleBindings);\n }\n return bindings;\n }\n getDebugTable() {\n const table = {};\n for (const [moduleName, module] of Object.entries(this.moduleUniforms)) {\n for (const [key, value] of Object.entries(module)) {\n table[`${moduleName}.${key}`] = {\n type: this.modules[moduleName].uniformTypes?.[key],\n value: String(value)\n };\n }\n }\n return table;\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Resource } from \"./resource.js\";\n/**\n * A compiled and linked shader program for compute\n */\nexport class ComputePipeline extends Resource {\n static defaultProps = {\n ...Resource.defaultProps,\n shader: undefined,\n entryPoint: undefined,\n constants: {},\n shaderLayout: undefined\n };\n get [Symbol.toStringTag]() {\n return 'ComputePipeline';\n }\n hash = '';\n constructor(device, props) {\n super(device, props, ComputePipeline.defaultProps);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { RenderPipeline, ComputePipeline } from '@luma.gl/core';\n/**\n * Efficiently creates / caches pipelines\n */\nexport class PipelineFactory {\n static defaultProps = { ...RenderPipeline.defaultProps };\n device;\n _hashCounter = 0;\n _hashes = {};\n _renderPipelineCache = {};\n _computePipelineCache = {};\n /** Get the singleton default pipeline factory for the specified device */\n static getDefaultPipelineFactory(device) {\n device._lumaData.defaultPipelineFactory =\n device._lumaData.defaultPipelineFactory || new PipelineFactory(device);\n return device._lumaData.defaultPipelineFactory;\n }\n constructor(device) {\n this.device = device;\n }\n /** Return a RenderPipeline matching props. Reuses a similar pipeline if already created. */\n createRenderPipeline(props) {\n const allProps = { ...RenderPipeline.defaultProps, ...props };\n const hash = this._hashRenderPipeline(allProps);\n if (!this._renderPipelineCache[hash]) {\n const pipeline = this.device.createRenderPipeline({\n ...allProps,\n id: allProps.id ? `${allProps.id}-cached` : undefined\n });\n pipeline.hash = hash;\n this._renderPipelineCache[hash] = { pipeline, useCount: 0 };\n }\n this._renderPipelineCache[hash].useCount++;\n return this._renderPipelineCache[hash].pipeline;\n }\n createComputePipeline(props) {\n const allProps = { ...ComputePipeline.defaultProps, ...props };\n const hash = this._hashComputePipeline(allProps);\n if (!this._computePipelineCache[hash]) {\n const pipeline = this.device.createComputePipeline({\n ...allProps,\n id: allProps.id ? `${allProps.id}-cached` : undefined\n });\n pipeline.hash = hash;\n this._computePipelineCache[hash] = { pipeline, useCount: 0 };\n }\n this._computePipelineCache[hash].useCount++;\n return this._computePipelineCache[hash].pipeline;\n }\n release(pipeline) {\n const hash = pipeline.hash;\n const cache = pipeline instanceof ComputePipeline ? this._computePipelineCache : this._renderPipelineCache;\n cache[hash].useCount--;\n if (cache[hash].useCount === 0) {\n cache[hash].pipeline.destroy();\n delete cache[hash];\n }\n }\n // PRIVATE\n _hashComputePipeline(props) {\n const shaderHash = this._getHash(props.shader.source);\n return `${shaderHash}`;\n }\n /** Calculate a hash based on all the inputs for a render pipeline */\n _hashRenderPipeline(props) {\n const vsHash = this._getHash(props.vs.source);\n const fsHash = props.fs ? this._getHash(props.fs.source) : 0;\n // WebGL specific\n // const {varyings = [], bufferMode = {}} = props;\n // const varyingHashes = varyings.map((v) => this._getHash(v));\n const varyingHash = '-'; // `${varyingHashes.join('/')}B${bufferMode}`\n const bufferLayoutHash = this._getHash(JSON.stringify(props.bufferLayout));\n switch (this.device.type) {\n case 'webgl':\n // WebGL is more dynamic\n return `${vsHash}/${fsHash}V${varyingHash}BL${bufferLayoutHash}`;\n default:\n // On WebGPU we need to rebuild the pipeline if topology, parameters or bufferLayout change\n const parameterHash = this._getHash(JSON.stringify(props.parameters));\n // TODO - Can json.stringify() generate different strings for equivalent objects if order of params is different?\n // create a deepHash() to deduplicate?\n return `${vsHash}/${fsHash}V${varyingHash}T${props.topology}P${parameterHash}BL${bufferLayoutHash}`;\n }\n }\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n return this._hashes[key];\n }\n}\n","import { Shader } from '@luma.gl/core';\n/** Manages a cached pool of Shaders for reuse. */\nexport class ShaderFactory {\n static defaultProps = { ...Shader.defaultProps };\n device;\n _cache = {};\n /** Returns the default ShaderFactory for the given {@link Device}, creating one if necessary. */\n static getDefaultShaderFactory(device) {\n device._lumaData.defaultShaderFactory ||= new ShaderFactory(device);\n return device._lumaData.defaultShaderFactory;\n }\n /** @internal */\n constructor(device) {\n this.device = device;\n }\n /** Requests a {@link Shader} from the cache, creating a new Shader only if necessary. */\n createShader(props) {\n const key = this._hashShader(props);\n let cacheEntry = this._cache[key];\n if (!cacheEntry) {\n const shader = this.device.createShader({\n ...props,\n id: props.id ? `${props.id}-cached` : undefined\n });\n this._cache[key] = cacheEntry = { shader, useCount: 0 };\n }\n cacheEntry.useCount++;\n return cacheEntry.shader;\n }\n /** Releases a previously-requested {@link Shader}, destroying it if no users remain. */\n release(shader) {\n const key = this._hashShader(shader);\n const cacheEntry = this._cache[key];\n if (cacheEntry) {\n cacheEntry.useCount--;\n if (cacheEntry.useCount === 0) {\n delete this._cache[key];\n cacheEntry.shader.destroy();\n }\n }\n }\n // PRIVATE\n _hashShader(value) {\n return `${value.stage}:${value.source}`;\n }\n}\n","// import {copyTextureToImage} from '../debug/copy-texture-to-image';\n/** Only works with 1st device? */\nlet canvas = null;\nlet ctx = null;\n// let targetImage: HTMLImageElement | null = null;\n/** Debug utility to draw FBO contents onto screen */\n// eslint-disable-next-line\nexport function debugFramebuffer(fbo, { id, minimap, opaque, top = '0', left = '0', rgbaScale = 1 }) {\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = id;\n canvas.title = id;\n canvas.style.zIndex = '100';\n canvas.style.position = 'absolute';\n canvas.style.top = top; // ⚠️\n canvas.style.left = left; // ⚠️\n canvas.style.border = 'blue 1px solid';\n canvas.style.transform = 'scaleY(-1)';\n document.body.appendChild(canvas);\n ctx = canvas.getContext('2d');\n // targetImage = new Image();\n }\n // const canvasHeight = (minimap ? 2 : 1) * fbo.height;\n if (canvas.width !== fbo.width || canvas.height !== fbo.height) {\n canvas.width = fbo.width / 2;\n canvas.height = fbo.height / 2;\n canvas.style.width = '400px';\n canvas.style.height = '400px';\n }\n // const image = copyTextureToImage(fbo, {targetMaxHeight: 100, targetImage});\n // ctx.drawImage(image, 0, 0);\n const color = fbo.device.readPixelsToArrayWebGL(fbo);\n const imageData = ctx.createImageData(fbo.width, fbo.height);\n // Full map\n const offset = 0;\n // if (color.some((v) => v > 0)) {\n // console.error('THERE IS NON-ZERO DATA IN THE FBO!');\n // }\n for (let i = 0; i < color.length; i += 4) {\n imageData.data[offset + i + 0] = color[i + 0] * rgbaScale;\n imageData.data[offset + i + 1] = color[i + 1] * rgbaScale;\n imageData.data[offset + i + 2] = color[i + 2] * rgbaScale;\n imageData.data[offset + i + 3] = opaque ? 255 : color[i + 3] * rgbaScale;\n }\n ctx.putImageData(imageData, 0, 0);\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer, Texture, TextureView, Sampler } from '@luma.gl/core';\nimport { RenderPipeline, UniformStore } from '@luma.gl/core';\nimport { log, uid, deepEqual, isObjectEmpty, splitUniformsAndBindings } from '@luma.gl/core';\nimport { getTypedArrayFromDataType, getAttributeInfosFromLayouts } from '@luma.gl/core';\nimport { ShaderAssembler, getShaderLayoutFromWGSL } from '@luma.gl/shadertools';\nimport { makeGPUGeometry } from \"../geometry/gpu-geometry.js\";\nimport { ShaderInputs } from \"../shader-inputs.js\";\nimport { PipelineFactory } from \"../lib/pipeline-factory.js\";\nimport { ShaderFactory } from \"../lib/shader-factory.js\";\nimport { getDebugTableForShaderLayout } from \"../debug/debug-shader-layout.js\";\nimport { debugFramebuffer } from \"../debug/debug-framebuffer.js\";\nconst LOG_DRAW_PRIORITY = 2;\nconst LOG_DRAW_TIMEOUT = 10000;\n/**\n * v9 Model API\n * A model\n * - automatically reuses pipelines (programs) when possible\n * - automatically rebuilds pipelines if necessary to accommodate changed settings\n * shadertools integration\n * - accepts modules and performs shader transpilation\n */\nexport class Model {\n static defaultProps = {\n ...RenderPipeline.defaultProps,\n source: null,\n vs: null,\n fs: null,\n id: 'unnamed',\n handle: undefined,\n userData: {},\n defines: {},\n modules: [],\n moduleSettings: undefined,\n geometry: null,\n indexBuffer: null,\n attributes: {},\n constantAttributes: {},\n varyings: [],\n isInstanced: undefined,\n instanceCount: 0,\n vertexCount: 0,\n shaderInputs: undefined,\n pipelineFactory: undefined,\n shaderFactory: undefined,\n transformFeedback: undefined,\n shaderAssembler: ShaderAssembler.getDefaultShaderAssembler(),\n debugShaders: undefined,\n disableWarnings: undefined\n };\n device;\n id;\n source;\n vs;\n fs;\n pipelineFactory;\n shaderFactory;\n userData = {};\n // Fixed properties (change can trigger pipeline rebuild)\n /** The render pipeline GPU parameters, depth testing etc */\n parameters;\n /** The primitive topology */\n topology;\n /** Buffer layout */\n bufferLayout;\n // Dynamic properties\n /** Use instanced rendering */\n isInstanced = undefined;\n /** instance count. `undefined` means not instanced */\n instanceCount = 0;\n /** Vertex count */\n vertexCount;\n /** Index buffer */\n indexBuffer = null;\n /** Buffer-valued attributes */\n bufferAttributes = {};\n /** Constant-valued attributes */\n constantAttributes = {};\n /** Bindings (textures, samplers, uniform buffers) */\n bindings = {};\n /** Sets uniforms @deprecated Use uniform buffers and setBindings() for portability*/\n uniforms = {};\n /**\n * VertexArray\n * @note not implemented: if bufferLayout is updated, vertex array has to be rebuilt!\n * @todo - allow application to define multiple vertex arrays?\n * */\n vertexArray;\n /** TransformFeedback, WebGL 2 only. */\n transformFeedback = null;\n /** The underlying GPU \"program\". @note May be recreated if parameters change */\n pipeline;\n /** ShaderInputs instance */\n shaderInputs;\n _uniformStore;\n _attributeInfos = {};\n _gpuGeometry = null;\n _getModuleUniforms;\n props;\n _pipelineNeedsUpdate = 'newly created';\n _needsRedraw = 'initializing';\n _destroyed = false;\n /** \"Time\" of last draw. Monotonically increasing timestamp */\n _lastDrawTimestamp = -1;\n constructor(device, props) {\n this.props = { ...Model.defaultProps, ...props };\n props = this.props;\n this.id = props.id || uid('model');\n this.device = device;\n Object.assign(this.userData, props.userData);\n // Setup shader module inputs\n const moduleMap = Object.fromEntries(this.props.modules?.map(module => [module.name, module]) || []);\n this.setShaderInputs(props.shaderInputs || new ShaderInputs(moduleMap));\n // Setup shader assembler\n const platformInfo = getPlatformInfo(device);\n // Extract modules from shader inputs if not supplied\n const modules = (this.props.modules?.length > 0 ? this.props.modules : this.shaderInputs?.getModules()) || [];\n const isWebGPU = this.device.type === 'webgpu';\n // WebGPU\n // TODO - hack to support unified WGSL shader\n // TODO - this is wrong, compile a single shader\n if (isWebGPU && this.props.source) {\n // WGSL\n this.props.shaderLayout ||= getShaderLayoutFromWGSL(this.props.source);\n const { source, getUniforms } = this.props.shaderAssembler.assembleShader({\n platformInfo,\n ...this.props,\n modules\n });\n this.source = source;\n this._getModuleUniforms = getUniforms;\n }\n else {\n // GLSL\n const { vs, fs, getUniforms } = this.props.shaderAssembler.assembleShaderPair({\n platformInfo,\n ...this.props,\n modules\n });\n this.vs = vs;\n this.fs = fs;\n this._getModuleUniforms = getUniforms;\n }\n this.vertexCount = this.props.vertexCount;\n this.instanceCount = this.props.instanceCount;\n this.topology = this.props.topology;\n this.bufferLayout = this.props.bufferLayout;\n this.parameters = this.props.parameters;\n // Geometry, if provided, sets topology and vertex cound\n if (props.geometry) {\n this.setGeometry(props.geometry);\n }\n this.pipelineFactory =\n props.pipelineFactory || PipelineFactory.getDefaultPipelineFactory(this.device);\n this.shaderFactory = props.shaderFactory || ShaderFactory.getDefaultShaderFactory(this.device);\n // Create the pipeline\n // @note order is important\n this.pipeline = this._updatePipeline();\n this.vertexArray = device.createVertexArray({\n renderPipeline: this.pipeline\n });\n // Now we can apply geometry attributes\n if (this._gpuGeometry) {\n this._setGeometryAttributes(this._gpuGeometry);\n }\n // Apply any dynamic settings that will not trigger pipeline change\n if ('isInstanced' in props) {\n this.isInstanced = props.isInstanced;\n }\n if (props.instanceCount) {\n this.setInstanceCount(props.instanceCount);\n }\n if (props.vertexCount) {\n this.setVertexCount(props.vertexCount);\n }\n if (props.indexBuffer) {\n this.setIndexBuffer(props.indexBuffer);\n }\n if (props.attributes) {\n this.setAttributes(props.attributes);\n }\n if (props.constantAttributes) {\n this.setConstantAttributes(props.constantAttributes);\n }\n if (props.bindings) {\n this.setBindings(props.bindings);\n }\n if (props.uniforms) {\n this.setUniforms(props.uniforms);\n }\n if (props.moduleSettings) {\n // log.warn('Model.props.moduleSettings is deprecated. Use Model.shaderInputs.setProps()')();\n this.updateModuleSettings(props.moduleSettings);\n }\n if (props.transformFeedback) {\n this.transformFeedback = props.transformFeedback;\n }\n // Catch any access to non-standard props\n Object.seal(this);\n }\n destroy() {\n if (this._destroyed)\n return;\n this.pipelineFactory.release(this.pipeline);\n this.shaderFactory.release(this.pipeline.vs);\n if (this.pipeline.fs) {\n this.shaderFactory.release(this.pipeline.fs);\n }\n this._uniformStore.destroy();\n // TODO - mark resource as managed and destroyIfManaged() ?\n this._gpuGeometry?.destroy();\n this._destroyed = true;\n }\n // Draw call\n /** Query redraw status. Clears the status. */\n needsRedraw() {\n // Catch any writes to already bound resources\n if (this._getBindingsUpdateTimestamp() > this._lastDrawTimestamp) {\n this.setNeedsRedraw('contents of bound textures or buffers updated');\n }\n const needsRedraw = this._needsRedraw;\n this._needsRedraw = false;\n return needsRedraw;\n }\n /** Mark the model as needing a redraw */\n setNeedsRedraw(reason) {\n this._needsRedraw ||= reason;\n }\n predraw() {\n // Update uniform buffers if needed\n this.updateShaderInputs();\n // Check if the pipeline is invalidated\n this.pipeline = this._updatePipeline();\n }\n draw(renderPass) {\n this.predraw();\n let drawSuccess;\n try {\n this._logDrawCallStart();\n // Update the pipeline if invalidated\n // TODO - inside RenderPass is likely the worst place to do this from performance perspective.\n // Application can call Model.predraw() to avoid this.\n this.pipeline = this._updatePipeline();\n // Set pipeline state, we may be sharing a pipeline so we need to set all state on every draw\n // Any caching needs to be done inside the pipeline functions\n this.pipeline.setBindings(this.bindings, { disableWarnings: this.props.disableWarnings });\n if (!isObjectEmpty(this.uniforms)) {\n this.pipeline.setUniformsWebGL(this.uniforms);\n }\n const { indexBuffer } = this.vertexArray;\n const indexCount = indexBuffer\n ? indexBuffer.byteLength / (indexBuffer.indexType === 'uint32' ? 4 : 2)\n : undefined;\n drawSuccess = this.pipeline.draw({\n renderPass,\n vertexArray: this.vertexArray,\n isInstanced: this.isInstanced,\n vertexCount: this.vertexCount,\n instanceCount: this.instanceCount,\n indexCount,\n transformFeedback: this.transformFeedback || undefined,\n // WebGL shares underlying cached pipelines even for models that have different parameters and topology,\n // so we must provide our unique parameters to each draw\n // (In WebGPU most parameters are encoded in the pipeline and cannot be changed per draw call)\n parameters: this.parameters,\n topology: this.topology\n });\n }\n finally {\n this._logDrawCallEnd();\n }\n this._logFramebuffer(renderPass);\n // Update needsRedraw flag\n if (drawSuccess) {\n this._lastDrawTimestamp = this.device.timestamp;\n this._needsRedraw = false;\n }\n else {\n this._needsRedraw = 'waiting for resource initialization';\n }\n return drawSuccess;\n }\n // Update fixed fields (can trigger pipeline rebuild)\n /**\n * Updates the optional geometry\n * Geometry, set topology and bufferLayout\n * @note Can trigger a pipeline rebuild / pipeline cache fetch on WebGPU\n */\n setGeometry(geometry) {\n this._gpuGeometry?.destroy();\n const gpuGeometry = geometry && makeGPUGeometry(this.device, geometry);\n if (gpuGeometry) {\n this.setTopology(gpuGeometry.topology || 'triangle-list');\n this.bufferLayout = mergeBufferLayouts(gpuGeometry.bufferLayout, this.bufferLayout);\n if (this.vertexArray) {\n this._setGeometryAttributes(gpuGeometry);\n }\n }\n this._gpuGeometry = gpuGeometry;\n }\n /**\n * Updates the primitive topology ('triangle-list', 'triangle-strip' etc).\n * @note Triggers a pipeline rebuild / pipeline cache fetch on WebGPU\n */\n setTopology(topology) {\n if (topology !== this.topology) {\n this.topology = topology;\n this._setPipelineNeedsUpdate('topology');\n }\n }\n /**\n * Updates the buffer layout.\n * @note Triggers a pipeline rebuild / pipeline cache fetch\n */\n setBufferLayout(bufferLayout) {\n this.bufferLayout = this._gpuGeometry\n ? mergeBufferLayouts(bufferLayout, this._gpuGeometry.bufferLayout)\n : bufferLayout;\n this._setPipelineNeedsUpdate('bufferLayout');\n // Recreate the pipeline\n this.pipeline = this._updatePipeline();\n // vertex array needs to be updated if we update buffer layout,\n // but not if we update parameters\n this.vertexArray = this.device.createVertexArray({\n renderPipeline: this.pipeline\n });\n // Reapply geometry attributes to the new vertex array\n if (this._gpuGeometry) {\n this._setGeometryAttributes(this._gpuGeometry);\n }\n }\n /**\n * Set GPU parameters.\n * @note Can trigger a pipeline rebuild / pipeline cache fetch.\n * @param parameters\n */\n setParameters(parameters) {\n if (!deepEqual(parameters, this.parameters, 2)) {\n this.parameters = parameters;\n this._setPipelineNeedsUpdate('parameters');\n }\n }\n // Update dynamic fields\n /**\n * Updates the instance count (used in draw calls)\n * @note Any attributes with stepMode=instance need to be at least this big\n */\n setInstanceCount(instanceCount) {\n this.instanceCount = instanceCount;\n // luma.gl examples don't set props.isInstanced and rely on auto-detection\n // but deck.gl sets instanceCount even for models that are not instanced.\n if (this.isInstanced === undefined && instanceCount > 0) {\n this.isInstanced = true;\n }\n this.setNeedsRedraw('instanceCount');\n }\n /**\n * Updates the vertex count (used in draw calls)\n * @note Any attributes with stepMode=vertex need to be at least this big\n */\n setVertexCount(vertexCount) {\n this.vertexCount = vertexCount;\n this.setNeedsRedraw('vertexCount');\n }\n /** Set the shader inputs */\n setShaderInputs(shaderInputs) {\n this.shaderInputs = shaderInputs;\n this._uniformStore = new UniformStore(this.shaderInputs.modules);\n // Create uniform buffer bindings for all modules\n for (const moduleName of Object.keys(this.shaderInputs.modules)) {\n const uniformBuffer = this._uniformStore.getManagedUniformBuffer(this.device, moduleName);\n this.bindings[`${moduleName}Uniforms`] = uniformBuffer;\n }\n this.setNeedsRedraw('shaderInputs');\n }\n /** Update uniform buffers from the model's shader inputs */\n updateShaderInputs() {\n this._uniformStore.setUniforms(this.shaderInputs.getUniformValues());\n // TODO - this is already tracked through buffer/texture update times?\n this.setNeedsRedraw('shaderInputs');\n }\n /**\n * Sets bindings (textures, samplers, uniform buffers)\n */\n setBindings(bindings) {\n Object.assign(this.bindings, bindings);\n this.setNeedsRedraw('bindings');\n }\n /**\n * Updates optional transform feedback. WebGL only.\n */\n setTransformFeedback(transformFeedback) {\n this.transformFeedback = transformFeedback;\n this.setNeedsRedraw('transformFeedback');\n }\n /**\n * Sets the index buffer\n * @todo - how to unset it if we change geometry?\n */\n setIndexBuffer(indexBuffer) {\n this.vertexArray.setIndexBuffer(indexBuffer);\n this.setNeedsRedraw('indexBuffer');\n }\n /**\n * Sets attributes (buffers)\n * @note Overrides any attributes previously set with the same name\n */\n setAttributes(buffers, options) {\n if (buffers.indices) {\n log.warn(`Model:${this.id} setAttributes() - indexBuffer should be set using setIndexBuffer()`)();\n }\n for (const [bufferName, buffer] of Object.entries(buffers)) {\n const bufferLayout = this.bufferLayout.find(layout => getAttributeNames(layout).includes(bufferName));\n if (!bufferLayout) {\n log.warn(`Model(${this.id}): Missing layout for buffer \"${bufferName}\".`)();\n continue; // eslint-disable-line no-continue\n }\n // For an interleaved attribute we may need to set multiple attributes\n const attributeNames = getAttributeNames(bufferLayout);\n let set = false;\n for (const attributeName of attributeNames) {\n const attributeInfo = this._attributeInfos[attributeName];\n if (attributeInfo) {\n this.vertexArray.setBuffer(attributeInfo.location, buffer);\n set = true;\n }\n }\n if (!set && !(options?.disableWarnings ?? this.props.disableWarnings)) {\n log.warn(`Model(${this.id}): Ignoring buffer \"${buffer.id}\" for unknown attribute \"${bufferName}\"`)();\n }\n }\n this.setNeedsRedraw('attributes');\n }\n /**\n * Sets constant attributes\n * @note Overrides any attributes previously set with the same name\n * Constant attributes are only supported in WebGL, not in WebGPU\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @param constantAttributes\n */\n setConstantAttributes(attributes, options) {\n for (const [attributeName, value] of Object.entries(attributes)) {\n const attributeInfo = this._attributeInfos[attributeName];\n if (attributeInfo) {\n this.vertexArray.setConstantWebGL(attributeInfo.location, value);\n }\n else if (!(options?.disableWarnings ?? this.props.disableWarnings)) {\n log.warn(`Model \"${this.id}: Ignoring constant supplied for unknown attribute \"${attributeName}\"`)();\n }\n }\n this.setNeedsRedraw('constants');\n }\n // DEPRECATED METHODS\n /**\n * Sets individual uniforms\n * @deprecated WebGL only, use uniform buffers for portability\n * @param uniforms\n */\n setUniforms(uniforms) {\n if (!isObjectEmpty(uniforms)) {\n this.pipeline.setUniformsWebGL(uniforms);\n Object.assign(this.uniforms, uniforms);\n }\n this.setNeedsRedraw('uniforms');\n }\n /**\n * @deprecated Updates shader module settings (which results in uniforms being set)\n */\n updateModuleSettings(props) {\n // log.warn('Model.updateModuleSettings is deprecated. Use Model.shaderInputs.setProps()')();\n const { bindings, uniforms } = splitUniformsAndBindings(this._getModuleUniforms(props));\n Object.assign(this.bindings, bindings);\n Object.assign(this.uniforms, uniforms);\n this.setNeedsRedraw('moduleSettings');\n }\n // Internal methods\n /** Get the timestamp of the latest updated bound GPU memory resource (buffer/texture). */\n _getBindingsUpdateTimestamp() {\n let timestamp = 0;\n for (const binding of Object.values(this.bindings)) {\n if (binding instanceof TextureView) {\n timestamp = Math.max(timestamp, binding.texture.updateTimestamp);\n }\n else if (binding instanceof Buffer || binding instanceof Texture) {\n timestamp = Math.max(timestamp, binding.updateTimestamp);\n }\n else if (!(binding instanceof Sampler)) {\n timestamp = Math.max(timestamp, binding.buffer.updateTimestamp);\n }\n }\n return timestamp;\n }\n /**\n * Updates the optional geometry attributes\n * Geometry, sets several attributes, indexBuffer, and also vertex count\n * @note Can trigger a pipeline rebuild / pipeline cache fetch on WebGPU\n */\n _setGeometryAttributes(gpuGeometry) {\n // Filter geometry attribute so that we don't issue warnings for unused attributes\n const attributes = { ...gpuGeometry.attributes };\n for (const [attributeName] of Object.entries(attributes)) {\n if (!this.pipeline.shaderLayout.attributes.find(layout => layout.name === attributeName) &&\n attributeName !== 'positions') {\n delete attributes[attributeName];\n }\n }\n // TODO - delete previous geometry?\n this.vertexCount = gpuGeometry.vertexCount;\n this.setIndexBuffer(gpuGeometry.indices || null);\n this.setAttributes(gpuGeometry.attributes, { disableWarnings: true });\n this.setAttributes(attributes, { disableWarnings: this.props.disableWarnings });\n this.setNeedsRedraw('geometry attributes');\n }\n /** Mark pipeline as needing update */\n _setPipelineNeedsUpdate(reason) {\n this._pipelineNeedsUpdate ||= reason;\n this.setNeedsRedraw(reason);\n }\n /** Update pipeline if needed */\n _updatePipeline() {\n if (this._pipelineNeedsUpdate) {\n let prevShaderVs = null;\n let prevShaderFs = null;\n if (this.pipeline) {\n log.log(1, `Model ${this.id}: Recreating pipeline because \"${this._pipelineNeedsUpdate}\".`)();\n prevShaderVs = this.pipeline.vs;\n prevShaderFs = this.pipeline.fs;\n }\n this._pipelineNeedsUpdate = false;\n const vs = this.shaderFactory.createShader({\n id: `${this.id}-vertex`,\n stage: 'vertex',\n source: this.source || this.vs,\n debug: this.props.debugShaders\n });\n let fs = null;\n if (this.source) {\n fs = vs;\n }\n else if (this.fs) {\n fs = this.shaderFactory.createShader({\n id: `${this.id}-fragment`,\n stage: 'fragment',\n source: this.source || this.fs,\n debug: this.props.debugShaders\n });\n }\n this.pipeline = this.pipelineFactory.createRenderPipeline({\n ...this.props,\n bufferLayout: this.bufferLayout,\n topology: this.topology,\n parameters: this.parameters,\n vs,\n fs\n });\n this._attributeInfos = getAttributeInfosFromLayouts(this.pipeline.shaderLayout, this.bufferLayout);\n if (prevShaderVs)\n this.shaderFactory.release(prevShaderVs);\n if (prevShaderFs)\n this.shaderFactory.release(prevShaderFs);\n }\n return this.pipeline;\n }\n /** Throttle draw call logging */\n _lastLogTime = 0;\n _logOpen = false;\n _logDrawCallStart() {\n // IF level is 4 or higher, log every frame.\n const logDrawTimeout = log.level > 3 ? 0 : LOG_DRAW_TIMEOUT;\n if (log.level < 2 || Date.now() - this._lastLogTime < logDrawTimeout) {\n return;\n }\n this._lastLogTime = Date.now();\n this._logOpen = true;\n log.group(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`, { collapsed: log.level <= 2 })();\n }\n _logDrawCallEnd() {\n if (this._logOpen) {\n const shaderLayoutTable = getDebugTableForShaderLayout(this.pipeline.shaderLayout, this.id);\n // log.table(logLevel, attributeTable)();\n // log.table(logLevel, uniformTable)();\n log.table(LOG_DRAW_PRIORITY, shaderLayoutTable)();\n const uniformTable = this.shaderInputs.getDebugTable();\n // Add any global uniforms\n for (const [name, value] of Object.entries(this.uniforms)) {\n uniformTable[name] = { value };\n }\n log.table(LOG_DRAW_PRIORITY, uniformTable)();\n const attributeTable = this._getAttributeDebugTable();\n log.table(LOG_DRAW_PRIORITY, this._attributeInfos)();\n log.table(LOG_DRAW_PRIORITY, attributeTable)();\n log.groupEnd(LOG_DRAW_PRIORITY)();\n this._logOpen = false;\n }\n }\n _drawCount = 0;\n _logFramebuffer(renderPass) {\n const debugFramebuffers = log.get('framebuffer');\n this._drawCount++;\n // Update first 3 frames and then every 60 frames\n if (!debugFramebuffers || (this._drawCount++ > 3 && this._drawCount % 60)) {\n return;\n }\n // TODO - display framebuffer output in debug window\n const framebuffer = renderPass.props.framebuffer;\n if (framebuffer) {\n debugFramebuffer(framebuffer, { id: framebuffer.id, minimap: true });\n // log.image({logLevel: LOG_DRAW_PRIORITY, message: `${framebuffer.id} %c sup?`, image})();\n }\n }\n _getAttributeDebugTable() {\n const table = {};\n for (const [name, attributeInfo] of Object.entries(this._attributeInfos)) {\n table[attributeInfo.location] = {\n name,\n type: attributeInfo.shaderType,\n values: this._getBufferOrConstantValues(this.vertexArray.attributes[attributeInfo.location], attributeInfo.bufferDataType)\n };\n }\n if (this.vertexArray.indexBuffer) {\n const { indexBuffer } = this.vertexArray;\n const values = indexBuffer.indexType === 'uint32'\n ? new Uint32Array(indexBuffer.debugData)\n : new Uint16Array(indexBuffer.debugData);\n table.indices = {\n name: 'indices',\n type: indexBuffer.indexType,\n values: values.toString()\n };\n }\n return table;\n }\n // TODO - fix typing of luma data types\n _getBufferOrConstantValues(attribute, dataType) {\n const TypedArrayConstructor = getTypedArrayFromDataType(dataType);\n const typedArray = attribute instanceof Buffer ? new TypedArrayConstructor(attribute.debugData) : attribute;\n return typedArray.toString();\n }\n}\n// HELPERS\n/** TODO - move to core, document add tests */\nfunction mergeBufferLayouts(layouts1, layouts2) {\n const layouts = [...layouts1];\n for (const attribute of layouts2) {\n const index = layouts.findIndex(attribute2 => attribute2.name === attribute.name);\n if (index < 0) {\n layouts.push(attribute);\n }\n else {\n layouts[index] = attribute;\n }\n }\n return layouts;\n}\n/** Create a shadertools platform info from the Device */\nexport function getPlatformInfo(device) {\n return {\n type: device.type,\n shaderLanguage: device.info.shadingLanguage,\n shaderLanguageVersion: device.info.shadingLanguageVersion,\n gpu: device.info.gpu,\n // HACK - we pretend that the DeviceFeatures is a Set, it has a similar API\n features: device.features\n };\n}\n/** Get attribute names from a BufferLayout */\nfunction getAttributeNames(bufferLayout) {\n return bufferLayout.attributes\n ? bufferLayout.attributes?.map(layout => layout.attribute)\n : [bufferLayout.name];\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Extracts a table suitable for `console.table()` from a shader layout to assist in debugging.\n * @param layout shader layout\n * @param name app should provide the most meaningful name, usually the model or pipeline name / id.\n * @returns\n */\nexport function getDebugTableForShaderLayout(layout, name) {\n const table = {};\n const header = 'Values'; // '`Shader Layout for ${name}`;\n if (layout.attributes.length === 0 && !layout.varyings?.length) {\n return { 'No attributes or varyings': { [header]: 'N/A' } };\n }\n for (const attributeDeclaration of layout.attributes) {\n if (attributeDeclaration) {\n const glslDeclaration = `${attributeDeclaration.location} ${attributeDeclaration.name}: ${attributeDeclaration.type}`;\n table[`in ${glslDeclaration}`] = { [header]: attributeDeclaration.stepMode || 'vertex' };\n }\n }\n for (const varyingDeclaration of layout.varyings || []) {\n const glslDeclaration = `${varyingDeclaration.location} ${varyingDeclaration.name}`;\n table[`out ${glslDeclaration}`] = { [header]: JSON.stringify(varyingDeclaration.accessor) };\n }\n return table;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Buffer, assert } from '@luma.gl/core';\nimport { getPassthroughFS } from '@luma.gl/shadertools';\nimport { Model } from \"../model/model.js\";\n/**\n * Creates a pipeline for buffer→buffer transforms.\n * @deprecated\n */\nexport class BufferTransform {\n device;\n model;\n transformFeedback;\n /** @deprecated Use device feature test. */\n static isSupported(device) {\n return device?.info?.type === 'webgl';\n }\n constructor(device, props = Model.defaultProps) {\n assert(BufferTransform.isSupported(device), 'BufferTransform not yet implemented on WebGPU');\n this.device = device;\n this.model = new Model(this.device, {\n id: props.id || 'buffer-transform-model',\n fs: props.fs || getPassthroughFS(),\n topology: props.topology || 'point-list',\n ...props\n });\n this.transformFeedback = this.device.createTransformFeedback({\n layout: this.model.pipeline.shaderLayout,\n buffers: props.feedbackBuffers\n });\n this.model.setTransformFeedback(this.transformFeedback);\n Object.seal(this);\n }\n /** Destroy owned resources. */\n destroy() {\n if (this.model) {\n this.model.destroy();\n }\n }\n /** @deprecated Use {@link destroy}. */\n delete() {\n this.destroy();\n }\n /** Run one transform loop. */\n run(options) {\n const renderPass = this.device.beginRenderPass(options);\n this.model.draw(renderPass);\n renderPass.end();\n }\n /** @deprecated */\n update(...args) {\n // TODO(v9): Method should likely be removed for v9. Keeping a method stub\n // to assist with migrating DeckGL usage.\n // eslint-disable-next-line no-console\n console.warn('TextureTransform#update() not implemented');\n }\n /** Returns the {@link Buffer} or {@link BufferRange} for given varying name. */\n getBuffer(varyingName) {\n return this.transformFeedback.getBuffer(varyingName);\n }\n readAsync(varyingName) {\n const result = this.getBuffer(varyingName);\n if (result instanceof Buffer) {\n return result.readAsync();\n }\n const { buffer, byteOffset = 0, byteLength = buffer.byteLength } = result;\n return buffer.readAsync(byteOffset, byteLength);\n }\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Calculate WebGL 64 bit float\n * @param a - the input float number\n * @param out - the output array. If not supplied, a new array is created.\n * @param startIndex - the index in the output array to fill from. Default 0.\n * @returns - the fp64 representation of the input number\n */\nexport function fp64ify(a, out = [], startIndex = 0) {\n const hiPart = Math.fround(a);\n const loPart = a - hiPart;\n out[startIndex] = hiPart;\n out[startIndex + 1] = loPart;\n return out;\n}\n/**\n * Calculate the low part of a WebGL 64 bit float\n * @param a the input float number\n * @returns the lower 32 bit of the number\n */\nexport function fp64LowPart(a) {\n return a - Math.fround(a);\n}\n/**\n * Calculate WebGL 64 bit matrix (transposed \"Float64Array\")\n * @param matrix the input matrix\n * @returns the fp64 representation of the input matrix\n */\nexport function fp64ifyMatrix4(matrix) {\n // Transpose the projection matrix to column major for GLSL.\n const matrixFP64 = new Float32Array(32);\n for (let i = 0; i < 4; ++i) {\n for (let j = 0; j < 4; ++j) {\n const index = i * 4 + j;\n fp64ify(matrix[j * 4 + i], matrixFP64, index * 2);\n }\n }\n return matrixFP64;\n}\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { glsl } from \"../../../lib/glsl-utils/highlight.js\";\nexport const fp64arithmeticShader = `\\\nuniform float ONE;\nvec2 split(float a) {\nconst float SPLIT = 4097.0;\nfloat t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nfloat a_hi = t * ONE - (t - a);\nfloat a_lo = a * ONE - a_hi;\n#else\nfloat a_hi = t - (t - a);\nfloat a_lo = a - a_hi;\n#endif\nreturn vec2(a_hi, a_lo);\n}\nvec2 split2(vec2 a) {\nvec2 b = split(a.x);\nb.y += a.y;\nreturn b;\n}\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nfloat sum = (a + b) * ONE;\nfloat err = b - (sum - a) * ONE;\n#else\nfloat sum = a + b;\nfloat err = b - (sum - a);\n#endif\nreturn vec2(sum, err);\n}\nvec2 twoSum(float a, float b) {\nfloat s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nfloat v = (s * ONE - a) * ONE;\nfloat err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\nfloat v = s - a;\nfloat err = (a - (s - v)) + (b - v);\n#endif\nreturn vec2(s, err);\n}\nvec2 twoSub(float a, float b) {\nfloat s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nfloat v = (s * ONE - a) * ONE;\nfloat err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\nfloat v = s - a;\nfloat err = (a - (s - v)) - (b + v);\n#endif\nreturn vec2(s, err);\n}\nvec2 twoSqr(float a) {\nfloat prod = a * a;\nvec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nfloat err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\na_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\nfloat err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\nreturn vec2(prod, err);\n}\nvec2 twoProd(float a, float b) {\nfloat prod = a * b;\nvec2 a_fp64 = split(a);\nvec2 b_fp64 = split(b);\nfloat err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\na_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\nreturn vec2(prod, err);\n}\nvec2 sum_fp64(vec2 a, vec2 b) {\nvec2 s, t;\ns = twoSum(a.x, b.x);\nt = twoSum(a.y, b.y);\ns.y += t.x;\ns = quickTwoSum(s.x, s.y);\ns.y += t.y;\ns = quickTwoSum(s.x, s.y);\nreturn s;\n}\nvec2 sub_fp64(vec2 a, vec2 b) {\nvec2 s, t;\ns = twoSub(a.x, b.x);\nt = twoSub(a.y, b.y);\ns.y += t.x;\ns = quickTwoSum(s.x, s.y);\ns.y += t.y;\ns = quickTwoSum(s.x, s.y);\nreturn s;\n}\nvec2 mul_fp64(vec2 a, vec2 b) {\nvec2 prod = twoProd(a.x, b.x);\nprod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\nprod = split2(prod);\n#endif\nprod = quickTwoSum(prod.x, prod.y);\nprod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\nprod = split2(prod);\n#endif\nprod = quickTwoSum(prod.x, prod.y);\nreturn prod;\n}\nvec2 div_fp64(vec2 a, vec2 b) {\nfloat xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\nvec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\nvec2 yn = a * xn;\n#endif\nfloat diff = (sub_fp64(a, mul_fp64(b, yn))).x;\nvec2 prod = twoProd(xn, diff);\nreturn sum_fp64(yn, prod);\n}\nvec2 sqrt_fp64(vec2 a) {\nif (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\nif (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\nfloat x = 1.0 / sqrt(a.x);\nfloat yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\nvec2 yn_sqr = twoSqr(yn) * ONE;\n#else\nvec2 yn_sqr = twoSqr(yn);\n#endif\nfloat diff = sub_fp64(a, yn_sqr).x;\nvec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\nreturn sum_fp64(split(yn), prod);\n#else\nreturn sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n`;\n","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { fp64ify, fp64LowPart, fp64ifyMatrix4 } from \"./fp64-utils.js\";\nimport { fp64arithmeticShader } from \"./fp64-arithmetic-glsl.js\";\nimport { fp64functionShader } from \"./fp64-functions-glsl.js\";\nconst CONST_UNIFORMS = {\n // Used in LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n ONE: 1.0\n};\nexport { fp64ify, fp64LowPart, fp64ifyMatrix4 };\nfunction getUniforms() {\n return CONST_UNIFORMS;\n}\n/**\n * 64bit arithmetic: add, sub, mul, div (small subset of fp64 module)\n */\nexport const fp64arithmetic = {\n name: 'fp64-arithmetic',\n vs: fp64arithmeticShader,\n getUniforms,\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\n/**\n * Full 64 bit math library\n */\nexport const fp64 = {\n name: 'fp64',\n vs: fp64functionShader,\n dependencies: [fp64arithmetic],\n // Additional Functions\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\n","/*\n * Helper function for padArray\n */\nfunction padArrayChunk(options) {\n const { source, target, start = 0, size, getData } = options;\n const end = options.end || target.length;\n const sourceLength = source.length;\n const targetLength = end - start;\n if (sourceLength > targetLength) {\n target.set(source.subarray(0, targetLength), start);\n return;\n }\n target.set(source, start);\n if (!getData) {\n return;\n }\n // source is not large enough to fill target space, call `getData` to get filler data\n let i = sourceLength;\n while (i < targetLength) {\n const datum = getData(i, source);\n for (let j = 0; j < size; j++) {\n target[start + i] = datum[j] || 0;\n i++;\n }\n }\n}\n/*\n * The padArray function stretches a source array to the size of a target array.\n The arrays can have internal structures (like the attributes of PathLayer and\n SolidPolygonLayer), defined by the optional sourceStartIndices and targetStartIndices parameters.\n If the target array is larger, the getData callback is used to fill in the blanks.\n */\nexport function padArray({ source, target, size, getData, sourceStartIndices, targetStartIndices }) {\n if (!sourceStartIndices || !targetStartIndices) {\n // Flat arrays\n padArrayChunk({\n source,\n target,\n size,\n getData\n });\n return target;\n }\n // Arrays have internal structure\n let sourceIndex = 0;\n let targetIndex = 0;\n const getChunkData = getData && ((i, chunk) => getData(i + targetIndex, chunk));\n const n = Math.min(sourceStartIndices.length, targetStartIndices.length);\n for (let i = 1; i < n; i++) {\n const nextSourceIndex = sourceStartIndices[i] * size;\n const nextTargetIndex = targetStartIndices[i] * size;\n padArrayChunk({\n source: source.subarray(sourceIndex, nextSourceIndex),\n target,\n start: targetIndex,\n end: nextTargetIndex,\n size,\n getData: getChunkData\n });\n sourceIndex = nextSourceIndex;\n targetIndex = nextTargetIndex;\n }\n if (targetIndex < target.length) {\n padArrayChunk({\n // @ts-ignore\n source: [],\n target,\n start: targetIndex,\n size,\n getData: getChunkData\n });\n }\n return target;\n}\n","import { padArray } from \"../utils/array-utils.js\";\nimport Attribute from \"../lib/attribute/attribute.js\";\nimport { GL } from '@luma.gl/constants';\n/** Create a new empty attribute with the same settings: type, shader layout etc. */\nexport function cloneAttribute(attribute) {\n // `attribute.settings` is the original options passed when constructing the attribute.\n // This ensures that we set the proper `doublePrecision` flag and shader attributes.\n const { device, settings, value } = attribute;\n const newAttribute = new Attribute(device, settings);\n // Placeholder value - necessary for generating the correct buffer layout\n newAttribute.setData({\n value: value instanceof Float64Array ? new Float64Array(0) : new Float32Array(0),\n normalized: settings.normalized\n });\n return newAttribute;\n}\n/** Returns the GLSL attribute type for the given number of float32 components. */\nexport function getAttributeTypeFromSize(size) {\n switch (size) {\n case 1:\n return 'float';\n case 2:\n return 'vec2';\n case 3:\n return 'vec3';\n case 4:\n return 'vec4';\n default:\n throw new Error(`No defined attribute type for size \"${size}\"`);\n }\n}\n/** Returns the {@link VertexFormat} for the given number of float32 components. */\nexport function getFloat32VertexFormat(size) {\n switch (size) {\n case 1:\n return 'float32';\n case 2:\n return 'float32x2';\n case 3:\n return 'float32x3';\n case 4:\n return 'float32x4';\n default:\n throw new Error('invalid type size');\n }\n}\nexport function cycleBuffers(buffers) {\n buffers.push(buffers.shift());\n}\nexport function getAttributeBufferLength(attribute, numInstances) {\n const { doublePrecision, settings, value, size } = attribute;\n const multiplier = doublePrecision && value instanceof Float64Array ? 2 : 1;\n let maxVertexOffset = 0;\n const { shaderAttributes } = attribute.settings;\n if (shaderAttributes) {\n for (const shaderAttribute of Object.values(shaderAttributes)) {\n maxVertexOffset = Math.max(maxVertexOffset, shaderAttribute.vertexOffset ?? 0);\n }\n }\n return ((settings.noAlloc ? value.length : (numInstances + maxVertexOffset) * size) *\n multiplier);\n}\nexport function matchBuffer({ device, source, target }) {\n if (!target || target.byteLength < source.byteLength) {\n target?.destroy();\n target = device.createBuffer({\n byteLength: source.byteLength,\n usage: source.usage\n });\n }\n return target;\n}\n/* eslint-disable complexity */\n// This helper is used when transitioning attributes from a set of values in one buffer layout\n// to a set of values in a different buffer layout. (Buffer layouts are used when attribute values\n// within a buffer should be grouped for drawElements, like the Polygon layer.) For example, a\n// buffer layout of [3, 4] might have data [A1, A2, A3, B1, B2, B3, B4]. If it needs to transition\n// to a buffer layout of [4, 2], it should produce a buffer, using the transition setting's `enter`\n// function, that looks like this: [A1, A2, A3, A4 (user `enter` fn), B1, B2, 0]. Note: the final\n// 0 in this buffer is because we never shrink buffers, only grow them, for performance reasons.\n//\n// padBuffer may return either the original buffer, or a new buffer if the size of the original\n// was insufficient. Callers are responsible for disposing of the original buffer if needed.\nexport function padBuffer({ device, buffer, attribute, fromLength, toLength, fromStartIndices, getData = x => x }) {\n // TODO: move the precisionMultiplier logic to the attribute when retrieving\n // its `size` and `elementOffset`?\n const precisionMultiplier = attribute.doublePrecision && attribute.value instanceof Float64Array ? 2 : 1;\n const size = attribute.size * precisionMultiplier;\n const byteOffset = attribute.byteOffset;\n // Transform feedback can only write to float varyings\n // Attributes of format unorm8/uint8 (1 byte per element) etc will be padded to float32 (4 bytes per element)\n const targetByteOffset = attribute.settings.bytesPerElement < 4\n ? (byteOffset / attribute.settings.bytesPerElement) * 4\n : byteOffset;\n const toStartIndices = attribute.startIndices;\n const hasStartIndices = fromStartIndices && toStartIndices;\n const isConstant = attribute.isConstant;\n // check if buffer needs to be padded\n if (!hasStartIndices && buffer && fromLength >= toLength) {\n return buffer;\n }\n const ArrayType = attribute.value instanceof Float64Array\n ? Float32Array\n : attribute.value.constructor;\n const toData = isConstant\n ? attribute.value\n : // TODO(v9.1): Avoid non-portable synchronous reads.\n new ArrayType(attribute\n .getBuffer()\n .readSyncWebGL(byteOffset, toLength * ArrayType.BYTES_PER_ELEMENT).buffer);\n if (attribute.settings.normalized && !isConstant) {\n const getter = getData;\n getData = (value, chunk) => attribute.normalizeConstant(getter(value, chunk));\n }\n const getMissingData = isConstant\n ? (i, chunk) => getData(toData, chunk)\n : (i, chunk) => getData(toData.subarray(i + byteOffset, i + byteOffset + size), chunk);\n // TODO(v9.1): Avoid non-portable synchronous reads.\n const source = buffer\n ? new Float32Array(buffer.readSyncWebGL(targetByteOffset, fromLength * 4).buffer)\n : new Float32Array(0);\n const target = new Float32Array(toLength);\n padArray({\n source,\n target,\n sourceStartIndices: fromStartIndices,\n targetStartIndices: toStartIndices,\n size,\n getData: getMissingData\n });\n if (!buffer || buffer.byteLength < target.byteLength + targetByteOffset) {\n buffer?.destroy();\n buffer = device.createBuffer({\n byteLength: target.byteLength + targetByteOffset,\n usage: 35050\n });\n }\n buffer.write(target, targetByteOffset);\n return buffer;\n}\n","import Transition from \"./transition.js\";\nimport { cloneAttribute, getAttributeBufferLength } from \"./gpu-transition-utils.js\";\nexport class GPUTransitionBase {\n constructor({ device, attribute, timeline }) {\n this.buffers = [];\n /** The vertex count of the last buffer.\n * Buffer may be larger than the actual length we want to use\n * because we only reallocate buffers when they grow, not when they shrink,\n * due to performance costs */\n this.currentLength = 0;\n this.device = device;\n this.transition = new Transition(timeline);\n this.attribute = attribute;\n this.attributeInTransition = cloneAttribute(attribute);\n this.currentStartIndices = attribute.startIndices;\n }\n get inProgress() {\n return this.transition.inProgress;\n }\n start(transitionSettings, numInstances, duration = Infinity) {\n this.settings = transitionSettings;\n this.currentStartIndices = this.attribute.startIndices;\n this.currentLength = getAttributeBufferLength(this.attribute, numInstances);\n this.transition.start({ ...transitionSettings, duration });\n }\n update() {\n const updated = this.transition.update();\n if (updated) {\n this.onUpdate();\n }\n return updated;\n }\n setBuffer(buffer) {\n this.attributeInTransition.setData({\n buffer,\n normalized: this.attribute.settings.normalized,\n // Retain placeholder value to generate correct shader layout\n value: this.attributeInTransition.value\n });\n }\n cancel() {\n this.transition.cancel();\n }\n delete() {\n this.cancel();\n for (const buffer of this.buffers) {\n buffer.destroy();\n }\n this.buffers.length = 0;\n }\n}\n","import { BufferTransform } from '@luma.gl/engine';\nimport { fp64arithmetic } from '@luma.gl/shadertools';\nimport { GL } from '@luma.gl/constants';\nimport { getAttributeTypeFromSize, cycleBuffers, padBuffer, matchBuffer, getFloat32VertexFormat } from \"./gpu-transition-utils.js\";\nimport { GPUTransitionBase } from \"./gpu-transition.js\";\nexport default class GPUInterpolationTransition extends GPUTransitionBase {\n constructor({ device, attribute, timeline }) {\n super({ device, attribute, timeline });\n this.type = 'interpolation';\n this.transform = getTransform(device, attribute);\n }\n start(transitionSettings, numInstances) {\n const prevLength = this.currentLength;\n const prevStartIndices = this.currentStartIndices;\n super.start(transitionSettings, numInstances, transitionSettings.duration);\n if (transitionSettings.duration <= 0) {\n this.transition.cancel();\n return;\n }\n const { buffers, attribute } = this;\n // Alternate between two buffers when new transitions start.\n // Last destination buffer is used as an attribute (from state),\n // And the other buffer is now the current buffer.\n cycleBuffers(buffers);\n buffers[0] = padBuffer({\n device: this.device,\n buffer: buffers[0],\n attribute,\n fromLength: prevLength,\n toLength: this.currentLength,\n fromStartIndices: prevStartIndices,\n getData: transitionSettings.enter\n });\n buffers[1] = matchBuffer({\n device: this.device,\n source: buffers[0],\n target: buffers[1]\n });\n this.setBuffer(buffers[1]);\n const { transform } = this;\n const model = transform.model;\n let vertexCount = Math.floor(this.currentLength / attribute.size);\n if (useFp64(attribute)) {\n vertexCount /= 2;\n }\n model.setVertexCount(vertexCount);\n if (attribute.isConstant) {\n model.setAttributes({ aFrom: buffers[0] });\n model.setConstantAttributes({ aTo: attribute.value });\n }\n else {\n model.setAttributes({\n aFrom: buffers[0],\n aTo: attribute.getBuffer()\n });\n }\n transform.transformFeedback.setBuffers({ vCurrent: buffers[1] });\n }\n onUpdate() {\n const { duration, easing } = this.settings;\n const { time } = this.transition;\n let t = time / duration;\n if (easing) {\n t = easing(t);\n }\n const { model } = this.transform;\n model.setUniforms({ time: t });\n this.transform.run({ discard: true });\n }\n delete() {\n super.delete();\n this.transform.destroy();\n }\n}\nconst vs = `\\\n#version 300 es\n#define SHADER_NAME interpolation-transition-vertex-shader\n\nuniform float time;\nin ATTRIBUTE_TYPE aFrom;\nin ATTRIBUTE_TYPE aTo;\nout ATTRIBUTE_TYPE vCurrent;\n\nvoid main(void) {\n vCurrent = mix(aFrom, aTo, time);\n gl_Position = vec4(0.0);\n}\n`;\nconst vs64 = `\\\n#version 300 es\n#define SHADER_NAME interpolation-transition-vertex-shader\n\nuniform float time;\nin ATTRIBUTE_TYPE aFrom;\nin ATTRIBUTE_TYPE aFrom64Low;\nin ATTRIBUTE_TYPE aTo;\nin ATTRIBUTE_TYPE aTo64Low;\nout ATTRIBUTE_TYPE vCurrent;\nout ATTRIBUTE_TYPE vCurrent64Low;\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\nvoid main(void) {\n for (int i=0; i 0;\n if (!isTransitioning) {\n transition.end();\n }\n }\n delete() {\n super.delete();\n this.transform.destroy();\n this.texture.destroy();\n this.framebuffer.destroy();\n }\n}\nconst vs = `\\\n#version 300 es\n#define SHADER_NAME spring-transition-vertex-shader\n\n#define EPSILON 0.00001\n\nuniform float stiffness;\nuniform float damping;\nin ATTRIBUTE_TYPE aPrev;\nin ATTRIBUTE_TYPE aCur;\nin ATTRIBUTE_TYPE aTo;\nout ATTRIBUTE_TYPE vNext;\nout float vIsTransitioningFlag;\n\nATTRIBUTE_TYPE getNextValue(ATTRIBUTE_TYPE cur, ATTRIBUTE_TYPE prev, ATTRIBUTE_TYPE dest) {\n ATTRIBUTE_TYPE velocity = cur - prev;\n ATTRIBUTE_TYPE delta = dest - cur;\n ATTRIBUTE_TYPE spring = delta * stiffness;\n ATTRIBUTE_TYPE damper = velocity * -1.0 * damping;\n return spring + damper + velocity + cur;\n}\n\nvoid main(void) {\n bool isTransitioning = length(aCur - aPrev) > EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n`;\nconst fs = `\\\n#version 300 es\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nin float vIsTransitioningFlag;\n\nout vec4 fragColor;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n fragColor = vec4(1.0);\n}`;\nfunction getTransform(device, attribute) {\n const attributeType = getAttributeTypeFromSize(attribute.size);\n const format = getFloat32VertexFormat(attribute.size);\n return new BufferTransform(device, {\n vs,\n fs,\n bufferLayout: [\n { name: 'aPrev', format },\n { name: 'aCur', format },\n { name: 'aTo', format: attribute.getBufferLayout().attributes[0].format }\n ],\n varyings: ['vNext'],\n defines: { ATTRIBUTE_TYPE: attributeType },\n parameters: {\n depthCompare: 'always',\n blendColorOperation: 'max',\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'one',\n blendAlphaOperation: 'max',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one'\n }\n });\n}\nfunction getTexture(device) {\n return device.createTexture({\n data: new Uint8Array(4),\n format: 'rgba8unorm',\n mipmaps: false,\n // dataFormat: GL.RGBA,\n width: 1,\n height: 1\n });\n}\nfunction getFramebuffer(device, texture) {\n return device.createFramebuffer({\n id: 'spring-transition-is-transitioning-framebuffer',\n width: 1,\n height: 1,\n colorAttachments: [texture]\n });\n}\n","// deck.gl, MIT license\nimport GPUInterpolationTransition from \"../../transitions/gpu-interpolation-transition.js\";\nimport GPUSpringTransition from \"../../transitions/gpu-spring-transition.js\";\nimport log from \"../../utils/log.js\";\nconst TRANSITION_TYPES = {\n interpolation: GPUInterpolationTransition,\n spring: GPUSpringTransition\n};\nexport default class AttributeTransitionManager {\n constructor(device, { id, timeline }) {\n if (!device)\n throw new Error('AttributeTransitionManager is constructed without device');\n this.id = id;\n this.device = device;\n this.timeline = timeline;\n this.transitions = {};\n this.needsRedraw = false;\n this.numInstances = 1;\n }\n finalize() {\n for (const attributeName in this.transitions) {\n this._removeTransition(attributeName);\n }\n }\n /* Public methods */\n // Called when attribute manager updates\n // Check the latest attributes for updates.\n update({ attributes, transitions, numInstances }) {\n // Transform class will crash if elementCount is 0\n this.numInstances = numInstances || 1;\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const settings = attribute.getTransitionSetting(transitions);\n // this attribute might not support transitions?\n if (!settings)\n continue; // eslint-disable-line no-continue\n this._updateAttribute(attributeName, attribute, settings);\n }\n for (const attributeName in this.transitions) {\n const attribute = attributes[attributeName];\n if (!attribute || !attribute.getTransitionSetting(transitions)) {\n // Animated attribute has been removed\n this._removeTransition(attributeName);\n }\n }\n }\n // Returns `true` if attribute is transition-enabled\n hasAttribute(attributeName) {\n const transition = this.transitions[attributeName];\n return transition && transition.inProgress;\n }\n // Get all the animated attributes\n getAttributes() {\n const animatedAttributes = {};\n for (const attributeName in this.transitions) {\n const transition = this.transitions[attributeName];\n if (transition.inProgress) {\n animatedAttributes[attributeName] = transition.attributeInTransition;\n }\n }\n return animatedAttributes;\n }\n /* eslint-disable max-statements */\n // Called every render cycle, run transform feedback\n // Returns `true` if anything changes\n run() {\n if (this.numInstances === 0) {\n return false;\n }\n for (const attributeName in this.transitions) {\n const updated = this.transitions[attributeName].update();\n if (updated) {\n this.needsRedraw = true;\n }\n }\n const needsRedraw = this.needsRedraw;\n this.needsRedraw = false;\n return needsRedraw;\n }\n /* eslint-enable max-statements */\n /* Private methods */\n _removeTransition(attributeName) {\n this.transitions[attributeName].delete();\n delete this.transitions[attributeName];\n }\n // Check an attributes for updates\n // Returns a transition object if a new transition is triggered.\n _updateAttribute(attributeName, attribute, settings) {\n const transition = this.transitions[attributeName];\n // an attribute can change transition type when it updates\n // let's remove the transition when that happens so we can create the new transition type\n // TODO: when switching transition types, make sure to carry over the attribute's\n // previous buffers, currentLength, startIndices, etc, to be used as the starting point\n // for the next transition\n let isNew = !transition || transition.type !== settings.type;\n if (isNew) {\n if (transition) {\n this._removeTransition(attributeName);\n }\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (TransitionType) {\n this.transitions[attributeName] = new TransitionType({\n attribute,\n timeline: this.timeline,\n device: this.device\n });\n }\n else {\n log.error(`unsupported transition type '${settings.type}'`)();\n isNew = false;\n }\n }\n if (isNew || attribute.needsRedraw()) {\n this.needsRedraw = true;\n this.transitions[attributeName].start(settings, this.numInstances);\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable guard-for-in */\nimport Attribute from \"./attribute.js\";\nimport log from \"../../utils/log.js\";\nimport memoize from \"../../utils/memoize.js\";\nimport { mergeBounds } from \"../../utils/math-utils.js\";\nimport debug from \"../../debug/index.js\";\nimport AttributeTransitionManager from \"./attribute-transition-manager.js\";\nconst TRACE_INVALIDATE = 'attributeManager.invalidate';\nconst TRACE_UPDATE_START = 'attributeManager.updateStart';\nconst TRACE_UPDATE_END = 'attributeManager.updateEnd';\nconst TRACE_ATTRIBUTE_UPDATE_START = 'attribute.updateStart';\nconst TRACE_ATTRIBUTE_ALLOCATE = 'attribute.allocate';\nconst TRACE_ATTRIBUTE_UPDATE_END = 'attribute.updateEnd';\nexport default class AttributeManager {\n constructor(device, { id = 'attribute-manager', stats, timeline } = {}) {\n this.mergeBoundsMemoized = memoize(mergeBounds);\n this.id = id;\n this.device = device;\n this.attributes = {};\n this.updateTriggers = {};\n this.needsRedraw = true;\n this.userData = {};\n this.stats = stats;\n this.attributeTransitionManager = new AttributeTransitionManager(device, {\n id: `${id}-transitions`,\n timeline\n });\n // For debugging sanity, prevent uninitialized members\n Object.seal(this);\n }\n finalize() {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].delete();\n }\n this.attributeTransitionManager.finalize();\n }\n // Returns the redraw flag, optionally clearing it.\n // Redraw flag will be set if any attributes attributes changed since\n // flag was last cleared.\n //\n // @param {String} [clearRedrawFlags=false] - whether to clear the flag\n // @return {false|String} - reason a redraw is needed.\n getNeedsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this.needsRedraw;\n this.needsRedraw = this.needsRedraw && !opts.clearRedrawFlags;\n return redraw && this.id;\n }\n // Sets the redraw flag.\n // @param {Boolean} redraw=true\n setNeedsRedraw() {\n this.needsRedraw = true;\n }\n // Adds attributes\n add(attributes) {\n this._add(attributes);\n }\n // Adds attributes\n addInstanced(attributes) {\n this._add(attributes, { stepMode: 'instance' });\n }\n /**\n * Removes attributes\n * Takes an array of attribute names and delete them from\n * the attribute map if they exists\n *\n * @example\n * attributeManager.remove(['position']);\n *\n * @param {Object} attributeNameArray - attribute name array (see above)\n */\n remove(attributeNameArray) {\n for (const name of attributeNameArray) {\n if (this.attributes[name] !== undefined) {\n this.attributes[name].delete();\n delete this.attributes[name];\n }\n }\n }\n // Marks an attribute for update\n invalidate(triggerName, dataRange) {\n const invalidatedAttributes = this._invalidateTrigger(triggerName, dataRange);\n // For performance tuning\n debug(TRACE_INVALIDATE, this, triggerName, invalidatedAttributes);\n }\n invalidateAll(dataRange) {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].setNeedsUpdate(attributeName, dataRange);\n }\n // For performance tuning\n debug(TRACE_INVALIDATE, this, 'all');\n }\n // Ensure all attribute buffers are updated from props or data.\n // eslint-disable-next-line complexity\n update({ data, numInstances, startIndices = null, transitions, props = {}, buffers = {}, context = {} }) {\n // keep track of whether some attributes are updated\n let updated = false;\n debug(TRACE_UPDATE_START, this);\n if (this.stats) {\n this.stats.get('Update Attributes').timeStart();\n }\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n const accessorName = attribute.settings.accessor;\n attribute.startIndices = startIndices;\n attribute.numInstances = numInstances;\n if (props[attributeName]) {\n log.removed(`props.${attributeName}`, `data.attributes.${attributeName}`)();\n }\n if (attribute.setExternalBuffer(buffers[attributeName])) {\n // Step 1: try update attribute directly from external buffers\n }\n else if (attribute.setBinaryValue(typeof accessorName === 'string' ? buffers[accessorName] : undefined, data.startIndices)) {\n // Step 2: try set packed value from external typed array\n }\n else if (typeof accessorName === 'string' &&\n !buffers[accessorName] &&\n attribute.setConstantValue(props[accessorName])) {\n // Step 3: try set constant value from props\n // Note: if buffers[accessorName] is supplied, ignore props[accessorName]\n // This may happen when setBinaryValue falls through to use the auto updater\n }\n else if (attribute.needsUpdate()) {\n // Step 4: update via updater callback\n updated = true;\n this._updateAttribute({\n attribute,\n numInstances,\n data,\n props,\n context\n });\n }\n this.needsRedraw = this.needsRedraw || attribute.needsRedraw();\n }\n if (updated) {\n // Only initiate alloc/update (and logging) if actually needed\n debug(TRACE_UPDATE_END, this, numInstances);\n }\n if (this.stats) {\n this.stats.get('Update Attributes').timeEnd();\n }\n this.attributeTransitionManager.update({\n attributes: this.attributes,\n numInstances,\n transitions\n });\n }\n // Update attribute transition to the current timestamp\n // Returns `true` if any transition is in progress\n updateTransition() {\n const { attributeTransitionManager } = this;\n const transitionUpdated = attributeTransitionManager.run();\n this.needsRedraw = this.needsRedraw || transitionUpdated;\n return transitionUpdated;\n }\n /**\n * Returns all attribute descriptors\n * Note: Format matches luma.gl Model/Program.setAttributes()\n * @return {Object} attributes - descriptors\n */\n getAttributes() {\n return { ...this.attributes, ...this.attributeTransitionManager.getAttributes() };\n }\n /**\n * Computes the spatial bounds of a given set of attributes\n */\n getBounds(attributeNames) {\n const bounds = attributeNames.map(attributeName => this.attributes[attributeName]?.getBounds());\n return this.mergeBoundsMemoized(bounds);\n }\n /**\n * Returns changed attribute descriptors\n * This indicates which WebGLBuffers need to be updated\n * @return {Object} attributes - descriptors\n */\n getChangedAttributes(opts = { clearChangedFlags: false }) {\n const { attributes, attributeTransitionManager } = this;\n const changedAttributes = { ...attributeTransitionManager.getAttributes() };\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n if (attribute.needsRedraw(opts) && !attributeTransitionManager.hasAttribute(attributeName)) {\n changedAttributes[attributeName] = attribute;\n }\n }\n return changedAttributes;\n }\n /** Generate WebGPU-style buffer layout descriptors from all attributes */\n getBufferLayouts(\n /** A luma.gl Model-shaped object that supplies additional hint to attribute resolution */\n modelInfo) {\n return Object.values(this.getAttributes()).map(attribute => attribute.getBufferLayout(modelInfo));\n }\n // PRIVATE METHODS\n /** Register new attributes */\n _add(\n /** A map from attribute name to attribute descriptors */\n attributes, \n /** Additional attribute settings to pass to all attributes */\n overrideOptions) {\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const props = {\n ...attribute,\n id: attributeName,\n size: (attribute.isIndexed && 1) || attribute.size || 1,\n ...overrideOptions\n };\n // Initialize the attribute descriptor, with WebGL and metadata fields\n this.attributes[attributeName] = new Attribute(this.device, props);\n }\n this._mapUpdateTriggersToAttributes();\n }\n // build updateTrigger name to attribute name mapping\n _mapUpdateTriggersToAttributes() {\n const triggers = {};\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n attribute.getUpdateTriggers().forEach(triggerName => {\n if (!triggers[triggerName]) {\n triggers[triggerName] = [];\n }\n triggers[triggerName].push(attributeName);\n });\n }\n this.updateTriggers = triggers;\n }\n _invalidateTrigger(triggerName, dataRange) {\n const { attributes, updateTriggers } = this;\n const invalidatedAttributes = updateTriggers[triggerName];\n if (invalidatedAttributes) {\n invalidatedAttributes.forEach(name => {\n const attribute = attributes[name];\n if (attribute) {\n attribute.setNeedsUpdate(attribute.id, dataRange);\n }\n });\n }\n return invalidatedAttributes;\n }\n _updateAttribute(opts) {\n const { attribute, numInstances } = opts;\n debug(TRACE_ATTRIBUTE_UPDATE_START, attribute);\n if (attribute.constant) {\n // The attribute is flagged as constant outside of an update cycle\n // Skip allocation and updater call\n // @ts-ignore value can be set to an array by user but always cast to typed array during attribute update\n attribute.setConstantValue(attribute.value);\n return;\n }\n if (attribute.allocate(numInstances)) {\n debug(TRACE_ATTRIBUTE_ALLOCATE, attribute, numInstances);\n }\n // Calls update on any buffers that need update\n const updated = attribute.updateBuffer(opts);\n if (updated) {\n this.needsRedraw = true;\n debug(TRACE_ATTRIBUTE_UPDATE_END, attribute, numInstances);\n }\n }\n}\n","import Transition from \"./transition.js\";\nconst EPSILON = 1e-5;\n/*\n * Calculate the next value in the spring transition\n * @param prev {Number} - previous value\n * @param cur {Number} - current value\n * @param dest {Number} - destination value\n * @param damping {Number}\n * @param stiffness {Number}\n */\nfunction updateSpringElement(prev, cur, dest, damping, stiffness) {\n const velocity = cur - prev;\n const delta = dest - cur;\n const spring = delta * stiffness;\n const damper = -velocity * damping;\n return spring + damper + velocity + cur;\n}\nfunction updateSpring(prev, cur, dest, damping, stiffness) {\n if (Array.isArray(dest)) {\n const next = [];\n for (let i = 0; i < dest.length; i++) {\n next[i] = updateSpringElement(prev[i], cur[i], dest[i], damping, stiffness);\n }\n return next;\n }\n return updateSpringElement(prev, cur, dest, damping, stiffness);\n}\n/*\n * Calculate the distance between two numbers or two vectors\n */\nfunction distance(value1, value2) {\n if (Array.isArray(value1)) {\n let distanceSquare = 0;\n for (let i = 0; i < value1.length; i++) {\n const d = value1[i] - value2[i];\n distanceSquare += d * d;\n }\n return Math.sqrt(distanceSquare);\n }\n return Math.abs(value1 - value2);\n}\nexport default class CPUSpringTransition extends Transition {\n get value() {\n return this._currValue;\n }\n _onUpdate() {\n // TODO - use timeline\n // const {time} = this;\n const { fromValue, toValue, damping, stiffness } = this.settings;\n const { _prevValue = fromValue, _currValue = fromValue } = this;\n let nextValue = updateSpring(_prevValue, _currValue, toValue, damping, stiffness);\n const delta = distance(nextValue, toValue);\n const velocity = distance(nextValue, _currValue);\n if (delta < EPSILON && velocity < EPSILON) {\n nextValue = toValue;\n this.end();\n }\n this._prevValue = _currValue;\n this._currValue = nextValue;\n }\n}\n","import { normalizeTransitionSettings } from \"./attribute/transition-settings.js\";\nimport CPUInterpolationTransition from \"../transitions/cpu-interpolation-transition.js\";\nimport CPUSpringTransition from \"../transitions/cpu-spring-transition.js\";\nimport log from \"../utils/log.js\";\nconst TRANSITION_TYPES = {\n interpolation: CPUInterpolationTransition,\n spring: CPUSpringTransition\n};\nexport default class UniformTransitionManager {\n constructor(timeline) {\n this.transitions = new Map();\n this.timeline = timeline;\n }\n get active() {\n return this.transitions.size > 0;\n }\n add(key, fromValue, toValue, settings) {\n const { transitions } = this;\n if (transitions.has(key)) {\n const transition = transitions.get(key);\n // value may not be available if `update()` has not been called. Fallback to `fromValue`\n const { value = transition.settings.fromValue } = transition;\n // start from interrupted position\n fromValue = value;\n this.remove(key);\n }\n settings = normalizeTransitionSettings(settings);\n if (!settings) {\n return;\n }\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (!TransitionType) {\n log.error(`unsupported transition type '${settings.type}'`)();\n return;\n }\n const transition = new TransitionType(this.timeline);\n transition.start({\n ...settings,\n fromValue,\n toValue\n });\n transitions.set(key, transition);\n }\n remove(key) {\n const { transitions } = this;\n if (transitions.has(key)) {\n transitions.get(key).cancel();\n transitions.delete(key);\n }\n }\n update() {\n const propsInTransition = {};\n for (const [key, transition] of this.transitions) {\n transition.update();\n propsInTransition[key] = transition.value;\n if (!transition.inProgress) {\n // transition ended\n this.remove(key);\n }\n }\n return propsInTransition;\n }\n clear() {\n for (const key of this.transitions.keys()) {\n this.remove(key);\n }\n }\n}\n","import { lerp } from '@math.gl/core';\nimport Transition from \"./transition.js\";\nexport default class CPUInterpolationTransition extends Transition {\n get value() {\n return this._value;\n }\n _onUpdate() {\n const { time, settings: { fromValue, toValue, duration, easing } } = this;\n const t = easing(time / duration);\n this._value = lerp(fromValue, toValue, t);\n }\n}\n","import { PROP_TYPES_SYMBOL } from \"./constants.js\";\nexport function validateProps(props) {\n const propTypes = props[PROP_TYPES_SYMBOL];\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const { validate } = propType;\n if (validate && !validate(props[propName], propType)) {\n throw new Error(`Invalid prop ${propName}: ${props[propName]}`);\n }\n }\n}\n// Returns an object with \"change flags\", either false or strings indicating reason for change\nexport function diffProps(props, oldProps) {\n // First check if any props have changed (ignore props that will be examined separately)\n const propsChangedReason = compareProps({\n newProps: props,\n oldProps,\n propTypes: props[PROP_TYPES_SYMBOL],\n ignoreProps: { data: null, updateTriggers: null, extensions: null, transitions: null }\n });\n // Now check if any data related props have changed\n const dataChangedReason = diffDataProps(props, oldProps);\n // Check update triggers to determine if any attributes need regeneration\n // Note - if data has changed, all attributes will need regeneration, so skip this step\n let updateTriggersChangedReason = false;\n if (!dataChangedReason) {\n updateTriggersChangedReason = diffUpdateTriggers(props, oldProps);\n }\n return {\n dataChanged: dataChangedReason,\n propsChanged: propsChangedReason,\n updateTriggersChanged: updateTriggersChangedReason,\n extensionsChanged: diffExtensions(props, oldProps),\n transitionsChanged: diffTransitions(props, oldProps)\n };\n}\nfunction diffTransitions(props, oldProps) {\n if (!props.transitions) {\n return false;\n }\n const result = {};\n const propTypes = props[PROP_TYPES_SYMBOL];\n let changed = false;\n for (const key in props.transitions) {\n const propType = propTypes[key];\n const type = propType && propType.type;\n const isTransitionable = type === 'number' || type === 'color' || type === 'array';\n if (isTransitionable && comparePropValues(props[key], oldProps[key], propType)) {\n result[key] = true;\n changed = true;\n }\n }\n return changed ? result : false;\n}\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * @param {Object} opt.oldProps - object with old key/value pairs\n * @param {Object} opt.newProps - object with new key/value pairs\n * @param {Object} opt.ignoreProps={} - object, keys that should not be compared\n * @returns {null|String} - null when values of all keys are strictly equal.\n * if unequal, returns a string explaining what changed.\n */\n/* eslint-disable max-statements, max-depth, complexity */\n/*\n * Note: for better performance, this function assumes that both oldProps and newProps\n inherit the same prototype (defaultProps). That is, if neither object contains own\n property , assume `oldProps.` and `newProps.` are equal.\n */\nexport function compareProps({ newProps, oldProps, ignoreProps = {}, propTypes = {}, triggerName = 'props' }) {\n // shallow equality => deep equality\n if (oldProps === newProps) {\n return false;\n }\n // TODO - do we need these checks? Should never happen...\n if (typeof newProps !== 'object' || newProps === null) {\n return `${triggerName} changed shallowly`;\n }\n if (typeof oldProps !== 'object' || oldProps === null) {\n return `${triggerName} changed shallowly`;\n }\n // Compare explicitly defined new props against old/default values\n for (const key of Object.keys(newProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in oldProps)) {\n return `${triggerName}.${key} added`;\n }\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n // Test if any old props have been dropped\n for (const key of Object.keys(oldProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in newProps)) {\n return `${triggerName}.${key} dropped`;\n }\n if (!Object.hasOwnProperty.call(newProps, key)) {\n // Compare dropped old prop against default value\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n }\n return false;\n}\n/* eslint-enable max-statements, max-depth, complexity */\n// HELPERS\nfunction comparePropValues(newProp, oldProp, propType) {\n // If prop type has an equal function, invoke it\n let equal = propType && propType.equal;\n if (equal && !equal(newProp, oldProp, propType)) {\n return 'changed deeply';\n }\n if (!equal) {\n // If object has an equals function, invoke it\n equal = newProp && oldProp && newProp.equals;\n if (equal && !equal.call(newProp, oldProp)) {\n return 'changed deeply';\n }\n }\n if (!equal && oldProp !== newProp) {\n return 'changed shallowly';\n }\n return null;\n}\n// The comparison of the data prop requires special handling\n// the dataComparator should be used if supplied\nfunction diffDataProps(props, oldProps) {\n if (oldProps === null) {\n return 'oldProps is null, initial diff';\n }\n let dataChanged = false;\n // Support optional app defined comparison of data\n const { dataComparator, _dataDiff } = props;\n if (dataComparator) {\n if (!dataComparator(props.data, oldProps.data)) {\n dataChanged = 'Data comparator detected a change';\n }\n // Otherwise, do a shallow equal on props\n }\n else if (props.data !== oldProps.data) {\n dataChanged = 'A new data container was supplied';\n }\n if (dataChanged && _dataDiff) {\n dataChanged = _dataDiff(props.data, oldProps.data) || dataChanged;\n }\n return dataChanged;\n}\n// Checks if any update triggers have changed\n// also calls callback to invalidate attributes accordingly.\nfunction diffUpdateTriggers(props, oldProps) {\n if (oldProps === null) {\n return { all: true };\n }\n // If the 'all' updateTrigger fires, ignore testing others\n if ('all' in props.updateTriggers) {\n const diffReason = diffUpdateTrigger(props, oldProps, 'all');\n if (diffReason) {\n return { all: true };\n }\n }\n const reason = {};\n let changed = false;\n // If the 'all' updateTrigger didn't fire, need to check all others\n for (const triggerName in props.updateTriggers) {\n if (triggerName !== 'all') {\n const diffReason = diffUpdateTrigger(props, oldProps, triggerName);\n if (diffReason) {\n reason[triggerName] = true;\n changed = true;\n }\n }\n }\n return changed ? reason : false;\n}\n// Returns true if any extensions have changed\nfunction diffExtensions(props, oldProps) {\n if (oldProps === null) {\n return true;\n }\n const oldExtensions = oldProps.extensions;\n const { extensions } = props;\n if (extensions === oldExtensions) {\n return false;\n }\n if (!oldExtensions || !extensions) {\n return true;\n }\n if (extensions.length !== oldExtensions.length) {\n return true;\n }\n for (let i = 0; i < extensions.length; i++) {\n if (!extensions[i].equals(oldExtensions[i])) {\n return true;\n }\n }\n return false;\n}\nfunction diffUpdateTrigger(props, oldProps, triggerName) {\n let newTriggers = props.updateTriggers[triggerName];\n newTriggers = newTriggers === undefined || newTriggers === null ? {} : newTriggers;\n let oldTriggers = oldProps.updateTriggers[triggerName];\n oldTriggers = oldTriggers === undefined || oldTriggers === null ? {} : oldTriggers;\n const diffReason = compareProps({\n oldProps: oldTriggers,\n newProps: newTriggers,\n triggerName\n });\n return diffReason;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nconst ERR_NOT_OBJECT = 'count(): argument not an object';\nconst ERR_NOT_CONTAINER = 'count(): argument not a container';\n/**\n * Deduces numer of elements in a JavaScript container.\n * - Auto-deduction for ES6 containers that define a count() method\n * - Auto-deduction for ES6 containers that define a size member\n * - Auto-deduction for Classic Arrays via the built-in length attribute\n * - Also handles objects, although note that this an O(N) operation\n */\nexport function count(container) {\n if (!isObject(container)) {\n throw new Error(ERR_NOT_OBJECT);\n }\n // Check if ES6 collection \"count\" function is available\n if (typeof container.count === 'function') {\n return container.count();\n }\n // Check if ES6 collection \"size\" attribute is set\n if (Number.isFinite(container.size)) {\n return container.size;\n }\n // Check if array length attribute is set\n // Note: checking this last since some ES6 collections (Immutable.js)\n // emit profuse warnings when trying to access `length` attribute\n if (Number.isFinite(container.length)) {\n return container.length;\n }\n // Note that getting the count of an object is O(N)\n if (isPlainObject(container)) {\n return Object.keys(container).length;\n }\n throw new Error(ERR_NOT_CONTAINER);\n}\n/**\n * Checks if argument is a plain object (not a class or array etc)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a plain JavaScript object\n */\nfunction isPlainObject(value) {\n return value !== null && typeof value === 'object' && value.constructor === Object;\n}\n/**\n * Checks if argument is an indexable object (not a primitive value, nor null)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a JavaScript object\n */\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n// Merge two luma.gl shader descriptors\nexport function mergeShaders(target, source) {\n if (!source) {\n return target;\n }\n const result = { ...target, ...source };\n if ('defines' in source) {\n result.defines = { ...target.defines, ...source.defines };\n }\n if ('modules' in source) {\n result.modules = (target.modules || []).concat(source.modules);\n // Hack: prject32 and project64 cannot co-exist\n if (source.modules.some(module => module.name === 'project64')) {\n const index = result.modules.findIndex(module => module.name === 'project32');\n if (index >= 0) {\n result.modules.splice(index, 1);\n }\n }\n }\n if ('inject' in source) {\n if (!target.inject) {\n result.inject = source.inject;\n }\n else {\n const mergedInjection = { ...target.inject };\n for (const key in source.inject) {\n mergedInjection[key] = (mergedInjection[key] || '') + source.inject[key];\n }\n result.inject = mergedInjection;\n }\n }\n return result;\n}\n","/**\n * Projection utils\n * TODO: move to Viewport class?\n */\nimport { COORDINATE_SYSTEM } from \"../../lib/constants.js\";\nimport { getOffsetOrigin } from \"./viewport-uniforms.js\";\nimport WebMercatorViewport from \"../../viewports/web-mercator-viewport.js\";\nimport { vec3, vec4 } from '@math.gl/core';\nimport { addMetersToLngLat } from '@math.gl/web-mercator';\nconst DEFAULT_COORDINATE_ORIGIN = [0, 0, 0];\n// In project.glsl, offset modes calculate z differently from LNG_LAT mode.\n// offset modes apply the y adjustment (unitsPerMeter2) when projecting z\n// LNG_LAT mode only use the linear scale.\nfunction lngLatZToWorldPosition(lngLatZ, viewport, offsetMode = false) {\n const p = viewport.projectPosition(lngLatZ);\n // TODO - avoid using instanceof\n if (offsetMode && viewport instanceof WebMercatorViewport) {\n const [longitude, latitude, z = 0] = lngLatZ;\n const distanceScales = viewport.getDistanceScales([longitude, latitude]);\n p[2] = z * distanceScales.unitsPerMeter[2];\n }\n return p;\n}\nfunction normalizeParameters(opts) {\n const { viewport, modelMatrix, coordinateOrigin } = opts;\n let { coordinateSystem, fromCoordinateSystem, fromCoordinateOrigin } = opts;\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n if (fromCoordinateSystem === undefined) {\n fromCoordinateSystem = coordinateSystem;\n }\n if (fromCoordinateOrigin === undefined) {\n fromCoordinateOrigin = coordinateOrigin;\n }\n return {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n modelMatrix,\n fromCoordinateSystem,\n fromCoordinateOrigin\n };\n}\n/** Get the common space position from world coordinates in the given coordinate system */\nexport function getWorldPosition(position, { viewport, modelMatrix, coordinateSystem, coordinateOrigin, offsetMode }) {\n let [x, y, z = 0] = position;\n if (modelMatrix) {\n [x, y, z] = vec4.transformMat4([], [x, y, z, 1.0], modelMatrix);\n }\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.LNGLAT:\n return lngLatZToWorldPosition([x, y, z], viewport, offsetMode);\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n return lngLatZToWorldPosition([x + coordinateOrigin[0], y + coordinateOrigin[1], z + (coordinateOrigin[2] || 0)], viewport, offsetMode);\n case COORDINATE_SYSTEM.METER_OFFSETS:\n return lngLatZToWorldPosition(addMetersToLngLat(coordinateOrigin, [x, y, z]), viewport, offsetMode);\n case COORDINATE_SYSTEM.CARTESIAN:\n default:\n return viewport.isGeospatial\n ? [x + coordinateOrigin[0], y + coordinateOrigin[1], z + coordinateOrigin[2]]\n : viewport.projectPosition([x, y, z]);\n }\n}\n/**\n * Equivalent to project_position in project.glsl\n * projects a user supplied position to world position directly with or without\n * a reference coordinate system\n */\nexport function projectPosition(position, params) {\n const { viewport, coordinateSystem, coordinateOrigin, modelMatrix, fromCoordinateSystem, fromCoordinateOrigin } = normalizeParameters(params);\n const { autoOffset = true } = params;\n const { geospatialOrigin = DEFAULT_COORDINATE_ORIGIN, shaderCoordinateOrigin = DEFAULT_COORDINATE_ORIGIN, offsetMode = false } = autoOffset ? getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin) : {};\n const worldPosition = getWorldPosition(position, {\n viewport,\n modelMatrix,\n coordinateSystem: fromCoordinateSystem,\n coordinateOrigin: fromCoordinateOrigin,\n offsetMode\n });\n if (offsetMode) {\n const positionCommonSpace = viewport.projectPosition(geospatialOrigin || shaderCoordinateOrigin);\n vec3.sub(worldPosition, worldPosition, positionCommonSpace);\n }\n return worldPosition;\n}\n","import { Texture } from '@luma.gl/core';\nconst DEFAULT_TEXTURE_PARAMETERS = {\n minFilter: 'linear',\n mipmapFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n};\n// Track the textures that are created by us. They need to be released when they are no longer used.\nconst internalTextures = {};\n/**\n *\n * @param owner\n * @param device\n * @param image could be one of:\n * - Texture\n * - Browser object: Image, ImageData, ImageData, HTMLCanvasElement, HTMLVideoElement, ImageBitmap\n * - Plain object: {width: , height: , data: }\n * @param parameters\n * @returns\n */\nexport function createTexture(owner, device, image, sampler) {\n if (image instanceof Texture) {\n // @ts-expect-error This type error seems like it shouldn't happen...\n return image;\n }\n else if (image.constructor && image.constructor.name !== 'Object') {\n // Browser object\n image = { data: image };\n }\n let samplerParameters = null;\n if (image.compressed) {\n samplerParameters = {\n minFilter: 'linear',\n mipmapFilter: image.data.length > 1 ? 'nearest' : 'linear'\n };\n }\n const texture = device.createTexture({\n ...image,\n sampler: {\n ...DEFAULT_TEXTURE_PARAMETERS,\n ...samplerParameters,\n ...sampler\n }\n });\n // Track this texture\n internalTextures[texture.id] = owner;\n return texture;\n}\nexport function destroyTexture(owner, texture) {\n if (!texture || !(texture instanceof Texture)) {\n return;\n }\n // Only delete the texture if requested by the same layer that created it\n if (internalTextures[texture.id] === owner) {\n texture.delete();\n delete internalTextures[texture.id];\n }\n}\n","import { createTexture, destroyTexture } from \"../utils/texture.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nconst TYPE_DEFINITIONS = {\n boolean: {\n validate(value, propType) {\n return true;\n },\n equal(value1, value2, propType) {\n return Boolean(value1) === Boolean(value2);\n }\n },\n number: {\n validate(value, propType) {\n return (Number.isFinite(value) &&\n (!('max' in propType) || value <= propType.max) &&\n (!('min' in propType) || value >= propType.min));\n }\n },\n color: {\n validate(value, propType) {\n return ((propType.optional && !value) ||\n (isArray(value) && (value.length === 3 || value.length === 4)));\n },\n equal(value1, value2, propType) {\n return deepEqual(value1, value2, 1);\n }\n },\n accessor: {\n validate(value, propType) {\n const valueType = getTypeOf(value);\n return valueType === 'function' || valueType === getTypeOf(propType.value);\n },\n equal(value1, value2, propType) {\n if (typeof value2 === 'function') {\n return true;\n }\n return deepEqual(value1, value2, 1);\n }\n },\n array: {\n validate(value, propType) {\n return (propType.optional && !value) || isArray(value);\n },\n equal(value1, value2, propType) {\n const { compare } = propType;\n const depth = Number.isInteger(compare) ? compare : compare ? 1 : 0;\n return compare ? deepEqual(value1, value2, depth) : value1 === value2;\n }\n },\n object: {\n equal(value1, value2, propType) {\n if (propType.ignore) {\n return true;\n }\n const { compare } = propType;\n const depth = Number.isInteger(compare) ? compare : compare ? 1 : 0;\n return compare ? deepEqual(value1, value2, depth) : value1 === value2;\n }\n },\n function: {\n validate(value, propType) {\n return (propType.optional && !value) || typeof value === 'function';\n },\n equal(value1, value2, propType) {\n // Backward compatibility - {compare: true} and {ignore: false} are equivalent\n const shouldIgnore = !propType.compare && propType.ignore !== false;\n return shouldIgnore || value1 === value2;\n }\n },\n data: {\n transform: (value, propType, component) => {\n if (!value) {\n return value;\n }\n const { dataTransform } = component.props;\n if (dataTransform) {\n return dataTransform(value);\n }\n // Detect loaders.gl v4 table format\n if (typeof value.shape === 'string' &&\n value.shape.endsWith('-table') &&\n Array.isArray(value.data)) {\n return value.data;\n }\n return value;\n }\n },\n image: {\n transform: (value, propType, component) => {\n const context = component.context;\n if (!context || !context.device) {\n return null;\n }\n return createTexture(component.id, context.device, value, {\n ...propType.parameters,\n ...component.props.textureParameters\n });\n },\n release: (value, propType, component) => {\n destroyTexture(component.id, value);\n }\n }\n};\nexport function parsePropTypes(propDefs) {\n const propTypes = {};\n const defaultProps = {};\n const deprecatedProps = {};\n for (const [propName, propDef] of Object.entries(propDefs)) {\n const deprecated = propDef?.deprecatedFor;\n if (deprecated) {\n deprecatedProps[propName] = Array.isArray(deprecated) ? deprecated : [deprecated];\n }\n else {\n const propType = parsePropType(propName, propDef);\n propTypes[propName] = propType;\n defaultProps[propName] = propType.value;\n }\n }\n return { propTypes, defaultProps, deprecatedProps };\n}\n// Parses one property definition entry. Either contains:\n// * a valid prop type object ({type, ...})\n// * or just a default value, in which case type and name inference is used\nfunction parsePropType(name, propDef) {\n switch (getTypeOf(propDef)) {\n case 'object':\n return normalizePropDefinition(name, propDef);\n case 'array':\n return normalizePropDefinition(name, { type: 'array', value: propDef, compare: false });\n case 'boolean':\n return normalizePropDefinition(name, { type: 'boolean', value: propDef });\n case 'number':\n return normalizePropDefinition(name, { type: 'number', value: propDef });\n case 'function':\n // return guessFunctionType(name, propDef);\n return normalizePropDefinition(name, { type: 'function', value: propDef, compare: true });\n default:\n return { name, type: 'unknown', value: propDef };\n }\n}\nfunction normalizePropDefinition(name, propDef) {\n if (!('type' in propDef)) {\n if (!('value' in propDef)) {\n // If no type and value this object is likely the value\n return { name, type: 'object', value: propDef };\n }\n return { name, type: getTypeOf(propDef.value), ...propDef };\n }\n return { name, ...TYPE_DEFINITIONS[propDef.type], ...propDef };\n}\nfunction isArray(value) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n// improved version of javascript typeof that can distinguish arrays and null values\nfunction getTypeOf(value) {\n if (isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n}\n","import log from \"../utils/log.js\";\nimport { isAsyncIterable } from \"../utils/iterable-utils.js\";\nimport { parsePropTypes } from \"./prop-types.js\";\nimport { COMPONENT_SYMBOL, PROP_TYPES_SYMBOL, DEPRECATED_PROPS_SYMBOL, ASYNC_ORIGINAL_SYMBOL, ASYNC_RESOLVED_SYMBOL, ASYNC_DEFAULTS_SYMBOL } from \"./constants.js\";\n// Create a property object\nexport function createProps(component, propObjects) {\n // Resolve extension value\n let extensions;\n for (let i = propObjects.length - 1; i >= 0; i--) {\n const props = propObjects[i];\n if ('extensions' in props) {\n // @ts-expect-error TS(2339) extensions not defined\n extensions = props.extensions;\n }\n }\n // Create a new prop object with empty default props object\n const propsPrototype = getPropsPrototype(component.constructor, extensions);\n // The true default props object will be found later\n const propsInstance = Object.create(propsPrototype);\n // Props need a back pointer to the owning component\n propsInstance[COMPONENT_SYMBOL] = component;\n // The supplied (original) values for those async props that are set to url strings or Promises.\n // In this case, the actual (i.e. resolved) values are looked up from component.internalState\n propsInstance[ASYNC_ORIGINAL_SYMBOL] = {};\n // Note: the actual (resolved) values for props that are NOT set to urls or Promises.\n // in this case the values are served directly from this map\n propsInstance[ASYNC_RESOLVED_SYMBOL] = {};\n // \"Copy\" all sync props\n for (let i = 0; i < propObjects.length; ++i) {\n const props = propObjects[i];\n // Do not use Object.assign here to avoid Symbols in props overwriting our private fields\n // This might happen if one of the arguments is another props instance\n for (const key in props) {\n propsInstance[key] = props[key];\n }\n }\n // Props must be immutable\n Object.freeze(propsInstance);\n return propsInstance;\n}\nconst MergedDefaultPropsCacheKey = '_mergedDefaultProps';\n// Return precalculated defaultProps and propType objects if available\n// build them if needed\nfunction getPropsPrototype(componentClass, extensions) {\n // A string that uniquely identifies the extensions involved\n let cacheKey = MergedDefaultPropsCacheKey;\n if (extensions) {\n for (const extension of extensions) {\n const ExtensionClass = extension.constructor;\n if (ExtensionClass) {\n cacheKey += `:${ExtensionClass.extensionName || ExtensionClass.name}`;\n }\n }\n }\n const defaultProps = getOwnProperty(componentClass, cacheKey);\n if (!defaultProps) {\n return (componentClass[cacheKey] = createPropsPrototypeAndTypes(componentClass, extensions || []));\n }\n return defaultProps;\n}\n// Build defaultProps and propType objects by walking component prototype chain\nfunction createPropsPrototypeAndTypes(componentClass, extensions) {\n const parent = componentClass.prototype;\n if (!parent) {\n return null;\n }\n const parentClass = Object.getPrototypeOf(componentClass);\n const parentDefaultProps = getPropsPrototype(parentClass);\n // Parse propTypes from Component.defaultProps\n const componentDefaultProps = getOwnProperty(componentClass, 'defaultProps') || {};\n const componentPropDefs = parsePropTypes(componentDefaultProps);\n // Merged default props object. Order: parent, self, extensions\n const defaultProps = Object.assign(Object.create(null), parentDefaultProps, componentPropDefs.defaultProps);\n // Merged prop type definitions. Order: parent, self, extensions\n const propTypes = Object.assign(Object.create(null), parentDefaultProps?.[PROP_TYPES_SYMBOL], componentPropDefs.propTypes);\n // Merged deprecation list. Order: parent, self, extensions\n const deprecatedProps = Object.assign(Object.create(null), parentDefaultProps?.[DEPRECATED_PROPS_SYMBOL], componentPropDefs.deprecatedProps);\n for (const extension of extensions) {\n const extensionDefaultProps = getPropsPrototype(extension.constructor);\n if (extensionDefaultProps) {\n Object.assign(defaultProps, extensionDefaultProps);\n Object.assign(propTypes, extensionDefaultProps[PROP_TYPES_SYMBOL]);\n Object.assign(deprecatedProps, extensionDefaultProps[DEPRECATED_PROPS_SYMBOL]);\n }\n }\n // Create any necessary property descriptors and create the default prop object\n // Assign merged default props\n createPropsPrototype(defaultProps, componentClass);\n // Add getters/setters for async props\n addAsyncPropsToPropPrototype(defaultProps, propTypes);\n // Add setters for deprecated props\n addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps);\n // Store the precalculated props\n defaultProps[PROP_TYPES_SYMBOL] = propTypes;\n defaultProps[DEPRECATED_PROPS_SYMBOL] = deprecatedProps;\n // Backwards compatibility\n // TODO: remove access of hidden property from the rest of the code base\n if (extensions.length === 0 && !hasOwnProperty(componentClass, '_propTypes')) {\n componentClass._propTypes = propTypes;\n }\n return defaultProps;\n}\n// Builds a pre-merged default props object that component props can inherit from\nfunction createPropsPrototype(defaultProps, componentClass) {\n // Avoid freezing `id` prop\n const id = getComponentName(componentClass);\n Object.defineProperties(defaultProps, {\n // `id` is treated specially because layer might need to override it\n id: {\n writable: true,\n value: id\n }\n });\n}\nfunction addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps) {\n for (const propName in deprecatedProps) {\n /* eslint-disable accessor-pairs */\n Object.defineProperty(defaultProps, propName, {\n enumerable: false,\n set(newValue) {\n const nameStr = `${this.id}: ${propName}`;\n for (const newPropName of deprecatedProps[propName]) {\n if (!hasOwnProperty(this, newPropName)) {\n this[newPropName] = newValue;\n }\n }\n log.deprecated(nameStr, deprecatedProps[propName].join('/'))();\n }\n });\n /* eslint-enable accessor-pairs */\n }\n}\n// Create descriptors for overridable props\nfunction addAsyncPropsToPropPrototype(defaultProps, propTypes) {\n const defaultValues = {};\n const descriptors = {};\n // Move async props into shadow values\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const { name, value } = propType;\n // Note: async is ES7 keyword, can't destructure\n if (propType.async) {\n defaultValues[name] = value;\n descriptors[name] = getDescriptorForAsyncProp(name);\n }\n }\n // Default \"resolved\" values for async props, returned if value not yet resolved/set.\n defaultProps[ASYNC_DEFAULTS_SYMBOL] = defaultValues;\n // Shadowed object, just to make sure \"early indexing\" into the instance does not fail\n defaultProps[ASYNC_ORIGINAL_SYMBOL] = {};\n Object.defineProperties(defaultProps, descriptors);\n}\n// Helper: Configures getter and setter for one async prop\nfunction getDescriptorForAsyncProp(name) {\n return {\n enumerable: true,\n // Save the provided value for async props in a special map\n set(newValue) {\n if (typeof newValue === 'string' ||\n newValue instanceof Promise ||\n isAsyncIterable(newValue)) {\n this[ASYNC_ORIGINAL_SYMBOL][name] = newValue;\n }\n else {\n this[ASYNC_RESOLVED_SYMBOL][name] = newValue;\n }\n },\n // Only the component's state knows the true value of async prop\n get() {\n if (this[ASYNC_RESOLVED_SYMBOL]) {\n // Prop value isn't async, so just return it\n if (name in this[ASYNC_RESOLVED_SYMBOL]) {\n const value = this[ASYNC_RESOLVED_SYMBOL][name];\n return value || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n if (name in this[ASYNC_ORIGINAL_SYMBOL]) {\n // It's an async prop value: look into component state\n const state = this[COMPONENT_SYMBOL] && this[COMPONENT_SYMBOL].internalState;\n if (state && state.hasAsyncProp(name)) {\n return state.getAsyncProp(name) || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n }\n }\n // the prop is not supplied, or\n // component not yet initialized/matched, return the component's default value for the prop\n return this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n };\n}\n// HELPER METHODS\nfunction hasOwnProperty(object, prop) {\n return Object.prototype.hasOwnProperty.call(object, prop);\n}\n// Constructors have their super class constructors as prototypes\nfunction getOwnProperty(object, prop) {\n return hasOwnProperty(object, prop) && object[prop];\n}\nfunction getComponentName(componentClass) {\n const componentName = componentClass.componentName;\n if (!componentName) {\n log.warn(`${componentClass.name}.componentName not specified`)();\n }\n return componentName || componentClass.name;\n}\n","import { COMPONENT_SYMBOL, PROP_TYPES_SYMBOL, ASYNC_ORIGINAL_SYMBOL, ASYNC_RESOLVED_SYMBOL, ASYNC_DEFAULTS_SYMBOL } from \"./constants.js\";\nimport { createProps } from \"./create-props.js\";\nlet counter = 0;\nexport default class Component {\n static { this.componentName = 'Component'; }\n static { this.defaultProps = {}; }\n constructor(...propObjects) {\n // Merge supplied props with default props and freeze them.\n /* eslint-disable prefer-spread */\n this.props = createProps(this, propObjects);\n /* eslint-enable prefer-spread */\n this.id = this.props.id; // The layer's id, used for matching with layers from last render cycle\n this.count = counter++; // Keep track of how many layer instances you are generating\n }\n // clone this layer with modified props\n clone(newProps) {\n const { props } = this;\n // Async props cannot be copied with Object.assign, copy them separately\n const asyncProps = {};\n // See async props definition in create-props.js\n for (const key in props[ASYNC_DEFAULTS_SYMBOL]) {\n if (key in props[ASYNC_RESOLVED_SYMBOL]) {\n asyncProps[key] = props[ASYNC_RESOLVED_SYMBOL][key];\n }\n else if (key in props[ASYNC_ORIGINAL_SYMBOL]) {\n asyncProps[key] = props[ASYNC_ORIGINAL_SYMBOL][key];\n }\n }\n // Some custom layer implementation may not support multiple arguments in the constructor\n // @ts-ignore\n return new this.constructor({ ...props, ...asyncProps, ...newProps });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport { isAsyncIterable } from \"../utils/iterable-utils.js\";\nimport { COMPONENT_SYMBOL, PROP_TYPES_SYMBOL, ASYNC_ORIGINAL_SYMBOL, ASYNC_RESOLVED_SYMBOL, ASYNC_DEFAULTS_SYMBOL } from \"./constants.js\";\nconst EMPTY_PROPS = Object.freeze({});\nexport default class ComponentState {\n constructor(component) {\n this.component = component;\n this.asyncProps = {}; // Prop values that the layer sees\n this.onAsyncPropUpdated = () => { };\n this.oldProps = null; // Last props before update\n this.oldAsyncProps = null; // Last props before update, with async values copied.\n }\n finalize() {\n for (const propName in this.asyncProps) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && asyncProp.type && asyncProp.type.release) {\n // Release any resources created by transforms\n asyncProp.type.release(asyncProp.resolvedValue, asyncProp.type, this.component);\n }\n }\n this.asyncProps = {};\n this.component = null;\n this.resetOldProps();\n }\n /* Layer-facing props API */\n getOldProps() {\n return this.oldAsyncProps || this.oldProps || EMPTY_PROPS;\n }\n resetOldProps() {\n this.oldAsyncProps = null;\n this.oldProps = this.component ? this.component.props : null;\n }\n // Checks if a prop is overridden\n hasAsyncProp(propName) {\n return propName in this.asyncProps;\n }\n // Returns value of an overriden prop\n getAsyncProp(propName) {\n const asyncProp = this.asyncProps[propName];\n return asyncProp && asyncProp.resolvedValue;\n }\n isAsyncPropLoading(propName) {\n if (propName) {\n const asyncProp = this.asyncProps[propName];\n return Boolean(asyncProp &&\n asyncProp.pendingLoadCount > 0 &&\n asyncProp.pendingLoadCount !== asyncProp.resolvedLoadCount);\n }\n for (const key in this.asyncProps) {\n if (this.isAsyncPropLoading(key)) {\n return true;\n }\n }\n return false;\n }\n // Without changing the original prop value, swap out the data resolution under the hood\n reloadAsyncProp(propName, value) {\n this._watchPromise(propName, Promise.resolve(value));\n }\n // Updates all async/overridden props (when new props come in)\n // Checks if urls have changed, starts loading, or removes override\n setAsyncProps(props) {\n this.component = props[COMPONENT_SYMBOL] || this.component;\n // NOTE: prop param and default values are only support for testing\n const resolvedValues = props[ASYNC_RESOLVED_SYMBOL] || {};\n const originalValues = props[ASYNC_ORIGINAL_SYMBOL] || props;\n const defaultValues = props[ASYNC_DEFAULTS_SYMBOL] || {};\n // TODO - use async props from the layer's prop types\n for (const propName in resolvedValues) {\n const value = resolvedValues[propName];\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n // Use transformed value\n resolvedValues[propName] = this.getAsyncProp(propName);\n }\n for (const propName in originalValues) {\n const value = originalValues[propName];\n // Makes sure a record exists for this prop\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n }\n }\n /* Placeholder methods for subclassing */\n _fetch(propName, url) {\n return null;\n }\n _onResolve(propName, value) { } // eslint-disable-line @typescript-eslint/no-empty-function\n _onError(propName, error) { } // eslint-disable-line @typescript-eslint/no-empty-function\n // Intercept strings (URLs) and Promises and activates loading and prop rewriting\n _updateAsyncProp(propName, value) {\n if (!this._didAsyncInputValueChange(propName, value)) {\n return;\n }\n // interpret value string as url and start a new load tracked by a promise\n if (typeof value === 'string') {\n value = this._fetch(propName, value);\n }\n // interprets promise and track the \"loading\"\n if (value instanceof Promise) {\n this._watchPromise(propName, value);\n return;\n }\n if (isAsyncIterable(value)) {\n this._resolveAsyncIterable(propName, value); // eslint-disable-line @typescript-eslint/no-floating-promises\n return;\n }\n // else, normal, non-async value. Just store value for now\n this._setPropValue(propName, value);\n }\n // Whenever async props are changing, we need to make a copy of oldProps\n // otherwise the prop rewriting will affect the value both in props and oldProps.\n // While the copy is relatively expensive, this only happens on load completion.\n _freezeAsyncOldProps() {\n if (!this.oldAsyncProps && this.oldProps) {\n // 1. inherit all synchronous props from oldProps\n // 2. reconfigure the async prop descriptors to fixed values\n this.oldAsyncProps = Object.create(this.oldProps);\n for (const propName in this.asyncProps) {\n Object.defineProperty(this.oldAsyncProps, propName, {\n enumerable: true,\n value: this.oldProps[propName]\n });\n }\n }\n }\n // Checks if an input value actually changed (to avoid reloading/rewatching promises/urls)\n _didAsyncInputValueChange(propName, value) {\n // @ts-ignore\n const asyncProp = this.asyncProps[propName];\n if (value === asyncProp.resolvedValue || value === asyncProp.lastValue) {\n return false;\n }\n asyncProp.lastValue = value;\n return true;\n }\n // Set normal, non-async value\n _setPropValue(propName, value) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n value = this._postProcessValue(asyncProp, value);\n asyncProp.resolvedValue = value;\n asyncProp.pendingLoadCount++;\n asyncProp.resolvedLoadCount = asyncProp.pendingLoadCount;\n }\n }\n // Set a just resolved async value, calling onAsyncPropUpdates if value changes asynchronously\n _setAsyncPropValue(propName, value, loadCount) {\n // Only update if loadCount is larger or equal to resolvedLoadCount\n // otherwise a more recent load has already completed\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && loadCount >= asyncProp.resolvedLoadCount && value !== undefined) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n asyncProp.resolvedValue = value;\n asyncProp.resolvedLoadCount = loadCount;\n // Call callback to inform listener\n this.onAsyncPropUpdated(propName, value);\n }\n }\n // Tracks a promise, sets the prop when loaded, handles load count\n _watchPromise(propName, promise) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n promise\n .then(data => {\n if (!this.component) {\n // This component state has been finalized\n return;\n }\n data = this._postProcessValue(asyncProp, data);\n this._setAsyncPropValue(propName, data, loadCount);\n this._onResolve(propName, data);\n })\n .catch(error => {\n this._onError(propName, error);\n });\n }\n }\n async _resolveAsyncIterable(propName, iterable) {\n if (propName !== 'data') {\n // we only support data as async iterable\n this._setPropValue(propName, iterable);\n return;\n }\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n return;\n }\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n let data = [];\n let count = 0;\n for await (const chunk of iterable) {\n if (!this.component) {\n // This component state has been finalized\n return;\n }\n // @ts-expect-error (2339) dataTransform is not decared in base component props\n const { dataTransform } = this.component.props;\n if (dataTransform) {\n data = dataTransform(chunk, data);\n }\n else {\n data = data.concat(chunk);\n }\n // Used by the default _dataDiff function\n Object.defineProperty(data, '__diff', {\n enumerable: false,\n value: [{ startRow: count, endRow: data.length }]\n });\n count = data.length;\n this._setAsyncPropValue(propName, data, loadCount);\n }\n this._onResolve(propName, data);\n }\n // Give the app a chance to post process the loaded data\n _postProcessValue(asyncProp, value) {\n const propType = asyncProp.type;\n if (propType && this.component) {\n if (propType.release) {\n propType.release(asyncProp.resolvedValue, propType, this.component);\n }\n if (propType.transform) {\n return propType.transform(value, propType, this.component);\n }\n }\n return value;\n }\n // Creating an asyncProp record if needed\n _createAsyncPropData(propName, defaultValue) {\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n const propTypes = this.component && this.component.props[PROP_TYPES_SYMBOL];\n // assert(defaultValue !== undefined);\n this.asyncProps[propName] = {\n type: propTypes && propTypes[propName],\n lastValue: null,\n resolvedValue: defaultValue,\n pendingLoadCount: 0,\n resolvedLoadCount: 0\n };\n }\n }\n}\n","// deck.gl, MIT license\nimport ComponentState from \"../lifecycle/component-state.js\";\nexport default class LayerState extends ComponentState {\n constructor({ attributeManager, layer }) {\n super(layer);\n this.attributeManager = attributeManager;\n this.needsRedraw = true;\n this.needsUpdate = true;\n this.subLayers = null;\n this.usesPickingColorCache = false;\n }\n get layer() {\n return this.component;\n }\n /* Override base Component methods with Layer-specific handling */\n _fetch(propName, url) {\n const layer = this.layer;\n const fetch = layer?.props.fetch;\n if (fetch) {\n return fetch(url, { propName, layer });\n }\n return super._fetch(propName, url);\n }\n _onResolve(propName, value) {\n const layer = this.layer;\n if (layer) {\n const onDataLoad = layer.props.onDataLoad;\n if (propName === 'data' && onDataLoad) {\n onDataLoad(value, { propName, layer });\n }\n }\n }\n _onError(propName, error) {\n const layer = this.layer;\n if (layer) {\n layer.raiseError(error, `loading ${propName} of ${this.layer}`);\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable react/no-direct-mutation-state */\nimport { Buffer } from '@luma.gl/core';\nimport { COORDINATE_SYSTEM } from \"./constants.js\";\nimport AttributeManager from \"./attribute/attribute-manager.js\";\nimport UniformTransitionManager from \"./uniform-transition-manager.js\";\nimport { diffProps, validateProps } from \"../lifecycle/props.js\";\nimport { LIFECYCLE } from \"../lifecycle/constants.js\";\nimport { count } from \"../utils/count.js\";\nimport log from \"../utils/log.js\";\nimport debug from \"../debug/index.js\";\nimport assert from \"../utils/assert.js\";\nimport memoize from \"../utils/memoize.js\";\nimport { mergeShaders } from \"../utils/shader.js\";\nimport { projectPosition, getWorldPosition } from \"../shaderlib/project/project-functions.js\";\nimport typedArrayManager from \"../utils/typed-array-manager.js\";\nimport Component from \"../lifecycle/component.js\";\nimport LayerState from \"./layer-state.js\";\nimport { worldToPixels } from '@math.gl/web-mercator';\nimport { load } from '@loaders.gl/core';\nconst TRACE_CHANGE_FLAG = 'layer.changeFlag';\nconst TRACE_INITIALIZE = 'layer.initialize';\nconst TRACE_UPDATE = 'layer.update';\nconst TRACE_FINALIZE = 'layer.finalize';\nconst TRACE_MATCHED = 'layer.matched';\nconst MAX_PICKING_COLOR_CACHE_SIZE = 2 ** 24 - 1;\nconst EMPTY_ARRAY = Object.freeze([]);\n// Only compare the same two viewports once\nconst areViewportsEqual = memoize(({ oldViewport, viewport }) => {\n return oldViewport.equals(viewport);\n});\nlet pickingColorCache = new Uint8ClampedArray(0);\nconst defaultProps = {\n // data: Special handling for null, see below\n data: { type: 'data', value: EMPTY_ARRAY, async: true },\n dataComparator: { type: 'function', value: null, optional: true },\n _dataDiff: {\n type: 'function',\n // @ts-ignore __diff is not defined on data\n value: data => data && data.__diff,\n optional: true\n },\n dataTransform: { type: 'function', value: null, optional: true },\n onDataLoad: { type: 'function', value: null, optional: true },\n onError: { type: 'function', value: null, optional: true },\n fetch: {\n type: 'function',\n value: (url, { propName, layer, loaders, loadOptions, signal }) => {\n const { resourceManager } = layer.context;\n loadOptions = loadOptions || layer.getLoadOptions();\n loaders = loaders || layer.props.loaders;\n if (signal) {\n loadOptions = {\n ...loadOptions,\n fetch: {\n ...loadOptions?.fetch,\n signal\n }\n };\n }\n let inResourceManager = resourceManager.contains(url);\n if (!inResourceManager && !loadOptions) {\n // If there is no layer-specific load options, then attempt to cache this resource in the data manager\n resourceManager.add({ resourceId: url, data: load(url, loaders), persistent: false });\n inResourceManager = true;\n }\n if (inResourceManager) {\n return resourceManager.subscribe({\n resourceId: url,\n onChange: data => layer.internalState?.reloadAsyncProp(propName, data),\n consumerId: layer.id,\n requestId: propName\n });\n }\n return load(url, loaders, loadOptions);\n }\n },\n updateTriggers: {}, // Update triggers: a core change detection mechanism in deck.gl\n visible: true,\n pickable: false,\n opacity: { type: 'number', min: 0, max: 1, value: 1 },\n operation: 'draw',\n onHover: { type: 'function', value: null, optional: true },\n onClick: { type: 'function', value: null, optional: true },\n onDragStart: { type: 'function', value: null, optional: true },\n onDrag: { type: 'function', value: null, optional: true },\n onDragEnd: { type: 'function', value: null, optional: true },\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n coordinateOrigin: { type: 'array', value: [0, 0, 0], compare: true },\n modelMatrix: { type: 'array', value: null, compare: true, optional: true },\n wrapLongitude: false,\n positionFormat: 'XYZ',\n colorFormat: 'RGBA',\n parameters: { type: 'object', value: {}, optional: true, compare: 2 },\n loadOptions: { type: 'object', value: null, optional: true, ignore: true },\n transitions: null,\n extensions: [],\n loaders: { type: 'array', value: [], optional: true, ignore: true },\n // Offset depth based on layer index to avoid z-fighting.\n // Negative values pull layer towards the camera\n // https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm\n getPolygonOffset: {\n type: 'function',\n value: ({ layerIndex }) => [0, -layerIndex * 100]\n },\n // Selection/Highlighting\n highlightedObjectIndex: null,\n autoHighlight: false,\n highlightColor: { type: 'accessor', value: [0, 0, 128, 128] }\n};\nexport default class Layer extends Component {\n constructor() {\n super(...arguments);\n this.internalState = null;\n this.lifecycle = LIFECYCLE.NO_STATE; // Helps track and debug the life cycle of the layers\n this.parent = null;\n }\n static { this.defaultProps = defaultProps; }\n static { this.layerName = 'Layer'; }\n static get componentName() {\n return Object.prototype.hasOwnProperty.call(this, 'layerName') ? this.layerName : '';\n }\n get root() {\n // eslint-disable-next-line\n let layer = this;\n while (layer.parent) {\n layer = layer.parent;\n }\n return layer;\n }\n toString() {\n const className = this.constructor.layerName || this.constructor.name;\n return `${className}({id: '${this.props.id}'})`;\n }\n // Public API for users\n /** Projects a point with current view state from the current layer's coordinate system to screen */\n project(xyz) {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n const worldPosition = getWorldPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem\n });\n const [x, y, z] = worldToPixels(worldPosition, viewport.pixelProjectionMatrix);\n return xyz.length === 2 ? [x, y] : [x, y, z];\n }\n /** Unprojects a screen pixel to the current view's default coordinate system\n Note: this does not reverse `project`. */\n unproject(xy) {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n return viewport.unproject(xy);\n }\n /** Projects a point with current view state from the current layer's coordinate system to the world space */\n projectPosition(xyz, params) {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n return projectPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem,\n ...params\n });\n }\n // Public API for custom layer implementation\n /** `true` if this layer renders other layers */\n get isComposite() {\n return false;\n }\n /** Updates selected state members and marks the layer for redraw */\n setState(partialState) {\n this.setChangeFlags({ stateChanged: true });\n Object.assign(this.state, partialState);\n this.setNeedsRedraw();\n }\n /** Sets the redraw flag for this layer, will trigger a redraw next animation frame */\n setNeedsRedraw() {\n if (this.internalState) {\n this.internalState.needsRedraw = true;\n }\n }\n /** Mark this layer as needs a deep update */\n setNeedsUpdate() {\n if (this.internalState) {\n this.context.layerManager.setNeedsUpdate(String(this));\n this.internalState.needsUpdate = true;\n }\n }\n /** Returns true if all async resources are loaded */\n get isLoaded() {\n return this.internalState ? !this.internalState.isAsyncPropLoading() : false;\n }\n /** Returns true if using shader-based WGS84 longitude wrapping */\n get wrapLongitude() {\n return this.props.wrapLongitude;\n }\n /** @deprecated Returns true if the layer is visible in the picking pass */\n isPickable() {\n return this.props.pickable && this.props.visible;\n }\n /** Returns an array of models used by this layer, can be overriden by layer subclass */\n getModels() {\n const state = this.state;\n return (state && (state.models || (state.model && [state.model]))) || [];\n }\n // TODO deprecate in favour of setShaderModuleProps\n /** Update shader module parameters */\n setModuleParameters(moduleParameters) {\n for (const model of this.getModels()) {\n model.updateModuleSettings(moduleParameters);\n }\n }\n /** Update shader input parameters */\n setShaderModuleProps(...props) {\n for (const model of this.getModels()) {\n model.shaderInputs.setProps(...props);\n }\n }\n /** Returns the attribute manager of this layer */\n getAttributeManager() {\n return this.internalState && this.internalState.attributeManager;\n }\n /** Returns the most recent layer that matched to this state\n (When reacting to an async event, this layer may no longer be the latest) */\n getCurrentLayer() {\n return this.internalState && this.internalState.layer;\n }\n /** Returns the default parse options for async props */\n getLoadOptions() {\n return this.props.loadOptions;\n }\n use64bitPositions() {\n const { coordinateSystem } = this.props;\n return (coordinateSystem === COORDINATE_SYSTEM.DEFAULT ||\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN);\n }\n // Event handling\n onHover(info, pickingEvent) {\n if (this.props.onHover) {\n return this.props.onHover(info, pickingEvent) || false;\n }\n return false;\n }\n onClick(info, pickingEvent) {\n if (this.props.onClick) {\n return this.props.onClick(info, pickingEvent) || false;\n }\n return false;\n }\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n // @return {Array} - a black color\n nullPickingColor() {\n return [0, 0, 0];\n }\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n encodePickingColor(i, target = []) {\n target[0] = (i + 1) & 255;\n target[1] = ((i + 1) >> 8) & 255;\n target[2] = (((i + 1) >> 8) >> 8) & 255;\n return target;\n }\n // Returns the index corresponding to a picking color that doesn't match any subfeature\n // @param {Uint8Array} color - color array to be decoded\n // @return {Array} - the decoded picking color\n decodePickingColor(color) {\n assert(color instanceof Uint8Array);\n const [i1, i2, i3] = color;\n // 1 was added to seperate from no selection\n const index = i1 + i2 * 256 + i3 * 65536 - 1;\n return index;\n }\n /** Deduces number of instances. Intention is to support:\n - Explicit setting of numInstances\n - Auto-deduction for ES6 containers that define a size member\n - Auto-deduction for Classic Arrays via the built-in length attribute\n - Auto-deduction via arrays */\n getNumInstances() {\n // First Check if app has provided an explicit value\n if (Number.isFinite(this.props.numInstances)) {\n return this.props.numInstances;\n }\n // Second check if the layer has set its own value\n if (this.state && this.state.numInstances !== undefined) {\n return this.state.numInstances;\n }\n // Use container library to get a count for any ES6 container or object\n return count(this.props.data);\n }\n /** Buffer layout describes how many attribute values are packed for each data object\n The default (null) is one value each object.\n Some data formats (e.g. paths, polygons) have various length. Their buffer layout\n is in the form of [L0, L1, L2, ...] */\n getStartIndices() {\n // First Check if startIndices is provided as an explicit value\n if (this.props.startIndices) {\n return this.props.startIndices;\n }\n // Second check if the layer has set its own value\n if (this.state && this.state.startIndices) {\n return this.state.startIndices;\n }\n return null;\n }\n // Default implementation\n getBounds() {\n return this.getAttributeManager()?.getBounds(['positions', 'instancePositions']);\n }\n getShaders(shaders) {\n shaders = mergeShaders(shaders, {\n disableWarnings: true,\n modules: this.context.defaultShaderModules\n });\n for (const extension of this.props.extensions) {\n shaders = mergeShaders(shaders, extension.getShaders.call(this, extension));\n }\n return shaders;\n }\n /** Controls if updateState should be called. By default returns true if any prop has changed */\n shouldUpdateState(params) {\n return params.changeFlags.propsOrDataChanged;\n }\n /** Default implementation, all attributes will be invalidated and updated when data changes */\n // eslint-disable-next-line complexity\n updateState(params) {\n const attributeManager = this.getAttributeManager();\n const { dataChanged } = params.changeFlags;\n if (dataChanged && attributeManager) {\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged) {\n attributeManager.invalidateAll(dataRange);\n }\n }\n else {\n attributeManager.invalidateAll();\n }\n }\n // Enable/disable picking buffer\n if (attributeManager) {\n const { props } = params;\n const hasPickingBuffer = this.internalState.hasPickingBuffer;\n const needsPickingBuffer = Number.isInteger(props.highlightedObjectIndex) ||\n props.pickable ||\n props.extensions.some(extension => extension.getNeedsPickingBuffer.call(this, extension));\n // Only generate picking buffer if needed\n if (hasPickingBuffer !== needsPickingBuffer) {\n this.internalState.hasPickingBuffer = needsPickingBuffer;\n const { pickingColors, instancePickingColors } = attributeManager.attributes;\n const pickingColorsAttribute = pickingColors || instancePickingColors;\n if (pickingColorsAttribute) {\n if (needsPickingBuffer && pickingColorsAttribute.constant) {\n pickingColorsAttribute.constant = false;\n attributeManager.invalidate(pickingColorsAttribute.id);\n }\n if (!pickingColorsAttribute.value && !needsPickingBuffer) {\n pickingColorsAttribute.constant = true;\n pickingColorsAttribute.value = [0, 0, 0];\n }\n }\n }\n }\n }\n /** Called once when layer is no longer matched and state will be discarded. Layers can destroy WebGL resources here. */\n finalizeState(context) {\n for (const model of this.getModels()) {\n model.destroy();\n }\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.finalize();\n }\n if (this.context) {\n this.context.resourceManager.unsubscribe({ consumerId: this.id });\n }\n if (this.internalState) {\n this.internalState.uniformTransitions.clear();\n this.internalState.finalize();\n }\n }\n // If state has a model, draw it with supplied uniforms\n draw(opts) {\n for (const model of this.getModels()) {\n model.draw(opts);\n }\n }\n // called to populate the info object that is passed to the event handler\n // @return null to cancel event\n getPickingInfo({ info, mode, sourceLayer }) {\n const { index } = info;\n if (index >= 0) {\n // If props.data is an indexable array, get the object\n if (Array.isArray(this.props.data)) {\n info.object = this.props.data[index];\n }\n }\n return info;\n }\n // END LIFECYCLE METHODS\n // / INTERNAL METHODS - called by LayerManager, DeckRenderer and DeckPicker\n /** (Internal) Propagate an error event through the system */\n raiseError(error, message) {\n if (message) {\n // Duplicating error message for backward compatibility, see #7986\n // TODO - revisit in v9\n error = new Error(`${message}: ${error.message}`, { cause: error });\n }\n if (!this.props.onError?.(error)) {\n this.context?.onError?.(error, this);\n }\n }\n /** (Internal) Checks if this layer needs redraw */\n getNeedsRedraw(opts = { clearRedrawFlags: false }) {\n return this._getNeedsRedraw(opts);\n }\n /** (Internal) Checks if this layer needs a deep update */\n needsUpdate() {\n if (!this.internalState) {\n return false;\n }\n // Call subclass lifecycle method\n return (this.internalState.needsUpdate ||\n this.hasUniformTransition() ||\n this.shouldUpdateState(this._getUpdateParams()));\n // End lifecycle method\n }\n /** Checks if this layer has ongoing uniform transition */\n hasUniformTransition() {\n return this.internalState?.uniformTransitions.active || false;\n }\n /** Called when this layer is rendered into the given viewport */\n activateViewport(viewport) {\n if (!this.internalState) {\n return;\n }\n const oldViewport = this.internalState.viewport;\n this.internalState.viewport = viewport;\n if (!oldViewport || !areViewportsEqual({ oldViewport, viewport })) {\n this.setChangeFlags({ viewportChanged: true });\n if (this.isComposite) {\n if (this.needsUpdate()) {\n // Composite layers may add/remove sublayers on viewport change\n // Because we cannot change the layers list during a draw cycle, we don't want to update sublayers right away\n // This will not call update immediately, but mark the layerManager as needs update on the next frame\n this.setNeedsUpdate();\n }\n }\n else {\n this._update();\n }\n }\n }\n /** Default implementation of attribute invalidation, can be redefined */\n invalidateAttribute(name = 'all') {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n if (name === 'all') {\n attributeManager.invalidateAll();\n }\n else {\n attributeManager.invalidate(name);\n }\n }\n /** Send updated attributes to the WebGL model */\n updateAttributes(changedAttributes) {\n // If some buffer layout changed\n let bufferLayoutChanged = false;\n for (const id in changedAttributes) {\n if (changedAttributes[id].layoutChanged()) {\n bufferLayoutChanged = true;\n }\n }\n for (const model of this.getModels()) {\n this._setModelAttributes(model, changedAttributes, bufferLayoutChanged);\n }\n }\n /** Recalculate any attributes if needed */\n _updateAttributes() {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n const props = this.props;\n // Figure out data length\n const numInstances = this.getNumInstances();\n const startIndices = this.getStartIndices();\n attributeManager.update({\n data: props.data,\n numInstances,\n startIndices,\n props,\n transitions: props.transitions,\n // @ts-ignore (TS2339) property attribute is not present on some acceptable data types\n buffers: props.data.attributes,\n context: this\n });\n const changedAttributes = attributeManager.getChangedAttributes({ clearChangedFlags: true });\n this.updateAttributes(changedAttributes);\n }\n /** Update attribute transitions. This is called in drawLayer, no model updates required. */\n _updateAttributeTransition() {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.updateTransition();\n }\n }\n /** Update uniform (prop) transitions. This is called in updateState, may result in model updates. */\n _updateUniformTransition() {\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n const { uniformTransitions } = this.internalState;\n if (uniformTransitions.active) {\n // clone props\n const propsInTransition = uniformTransitions.update();\n const props = Object.create(this.props);\n for (const key in propsInTransition) {\n Object.defineProperty(props, key, { value: propsInTransition[key] });\n }\n return props;\n }\n return this.props;\n }\n /** Updater for the automatically populated instancePickingColors attribute */\n calculateInstancePickingColors(attribute, { numInstances }) {\n if (attribute.constant) {\n return;\n }\n // calculateInstancePickingColors always generates the same sequence.\n // pickingColorCache saves the largest generated sequence for reuse\n const cacheSize = Math.floor(pickingColorCache.length / 4);\n // Record when using the picking buffer cache, so that layers can always point at the most recently allocated cache\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.usesPickingColorCache = true;\n if (cacheSize < numInstances) {\n if (numInstances > MAX_PICKING_COLOR_CACHE_SIZE) {\n log.warn('Layer has too many data objects. Picking might not be able to distinguish all objects.')();\n }\n pickingColorCache = typedArrayManager.allocate(pickingColorCache, numInstances, {\n size: 4,\n copy: true,\n maxCount: Math.max(numInstances, MAX_PICKING_COLOR_CACHE_SIZE)\n });\n // If the attribute is larger than the cache, resize the cache and populate the missing chunk\n const newCacheSize = Math.floor(pickingColorCache.length / 4);\n const pickingColor = [];\n for (let i = cacheSize; i < newCacheSize; i++) {\n this.encodePickingColor(i, pickingColor);\n pickingColorCache[i * 4 + 0] = pickingColor[0];\n pickingColorCache[i * 4 + 1] = pickingColor[1];\n pickingColorCache[i * 4 + 2] = pickingColor[2];\n }\n }\n attribute.value = pickingColorCache.subarray(0, numInstances * 4);\n }\n /** Apply changed attributes to model */\n _setModelAttributes(model, changedAttributes, bufferLayoutChanged = false) {\n if (!Object.keys(changedAttributes).length) {\n return;\n }\n if (bufferLayoutChanged) {\n // AttributeManager is always defined when this method is called\n const attributeManager = this.getAttributeManager();\n model.setBufferLayout(attributeManager.getBufferLayouts(model));\n // All attributes must be reset after buffer layout change\n changedAttributes = attributeManager.getAttributes();\n }\n // @ts-ignore luma.gl type issue\n const excludeAttributes = model.userData?.excludeAttributes || {};\n const attributeBuffers = {};\n const constantAttributes = {};\n for (const name in changedAttributes) {\n if (excludeAttributes[name]) {\n continue;\n }\n const values = changedAttributes[name].getValue();\n for (const attributeName in values) {\n const value = values[attributeName];\n if (value instanceof Buffer) {\n if (changedAttributes[name].settings.isIndexed) {\n model.setIndexBuffer(value);\n }\n else {\n attributeBuffers[attributeName] = value;\n }\n }\n else if (value) {\n constantAttributes[attributeName] = value;\n }\n }\n }\n // TODO - update buffer map?\n model.setAttributes(attributeBuffers);\n model.setConstantAttributes(constantAttributes);\n }\n /** (Internal) Sets the picking color at the specified index to null picking color. Used for multi-depth picking.\n This method may be overriden by layer implementations */\n disablePickingIndex(objectIndex) {\n const data = this.props.data;\n if (!('attributes' in data)) {\n this._disablePickingIndex(objectIndex);\n return;\n }\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const { pickingColors, instancePickingColors } = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n const externalColorAttribute = colors && data.attributes && data.attributes[colors.id];\n if (externalColorAttribute && externalColorAttribute.value) {\n const values = externalColorAttribute.value;\n const objectColor = this.encodePickingColor(objectIndex);\n for (let index = 0; index < data.length; index++) {\n const i = colors.getVertexOffset(index);\n if (values[i] === objectColor[0] &&\n values[i + 1] === objectColor[1] &&\n values[i + 2] === objectColor[2]) {\n this._disablePickingIndex(index);\n }\n }\n }\n else {\n this._disablePickingIndex(objectIndex);\n }\n }\n // TODO - simplify subclassing interface\n _disablePickingIndex(objectIndex) {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const { pickingColors, instancePickingColors } = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n const start = colors.getVertexOffset(objectIndex);\n const end = colors.getVertexOffset(objectIndex + 1);\n // Fill the sub buffer with 0s, 1 byte per element\n colors.buffer.write(new Uint8Array(end - start), start);\n }\n /** (Internal) Re-enable all picking indices after multi-depth picking */\n restorePickingColors() {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const { pickingColors, instancePickingColors } = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n // The picking color cache may have been freed and then reallocated. This ensures we read from the currently allocated cache.\n if (\n // @ts-ignore (TS2531) this method is only called internally with internalState defined\n this.internalState.usesPickingColorCache &&\n colors.value.buffer !== pickingColorCache.buffer) {\n colors.value = pickingColorCache.subarray(0, colors.value.length);\n }\n colors.updateSubBuffer({ startOffset: 0 });\n }\n /* eslint-disable max-statements */\n /* (Internal) Called by layer manager when a new layer is found */\n _initialize() {\n assert(!this.internalState); // finalized layer cannot be reused\n assert(Number.isFinite(this.props.coordinateSystem)); // invalid coordinateSystem\n debug(TRACE_INITIALIZE, this);\n const attributeManager = this._getAttributeManager();\n if (attributeManager) {\n // All instanced layers get instancePickingColors attribute by default\n // Their shaders can use it to render a picking scene\n // TODO - this slightly slows down non instanced layers\n attributeManager.addInstanced({\n instancePickingColors: {\n type: 'uint8',\n size: 4,\n noAlloc: true,\n // Updaters are always called with `this` pointing to the layer\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateInstancePickingColors\n }\n });\n }\n this.internalState = new LayerState({\n attributeManager,\n layer: this\n });\n this._clearChangeFlags(); // populate this.internalState.changeFlags\n this.state = {};\n // for backwards compatibility with older layers\n // TODO - remove in next release\n /* eslint-disable accessor-pairs */\n Object.defineProperty(this.state, 'attributeManager', {\n get: () => {\n log.deprecated('layer.state.attributeManager', 'layer.getAttributeManager()')();\n return attributeManager;\n }\n });\n /* eslint-enable accessor-pairs */\n this.internalState.uniformTransitions = new UniformTransitionManager(this.context.timeline);\n this.internalState.onAsyncPropUpdated = this._onAsyncPropUpdated.bind(this);\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n // Call subclass lifecycle methods\n this.initializeState(this.context);\n // Initialize extensions\n for (const extension of this.props.extensions) {\n extension.initializeState.call(this, this.context, extension);\n }\n // End subclass lifecycle methods\n // initializeState callback tends to clear state\n this.setChangeFlags({\n dataChanged: 'init',\n propsChanged: 'init',\n viewportChanged: true,\n extensionsChanged: true\n });\n this._update();\n }\n /** (Internal) Called by layer manager to transfer state from an old layer */\n _transferState(oldLayer) {\n debug(TRACE_MATCHED, this, this === oldLayer);\n const { state, internalState } = oldLayer;\n if (this === oldLayer) {\n return;\n }\n // Move internalState\n this.internalState = internalState;\n // Move state\n this.state = state;\n // We keep the state ref on old layers to support async actions\n // oldLayer.state = null;\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n this._diffProps(this.props, this.internalState.getOldProps());\n }\n /** (Internal) Called by layer manager when a new layer is added or an existing layer is matched with a new instance */\n _update() {\n // Call subclass lifecycle method\n const stateNeedsUpdate = this.needsUpdate();\n // End lifecycle method\n debug(TRACE_UPDATE, this, stateNeedsUpdate);\n if (!stateNeedsUpdate) {\n return;\n }\n const currentProps = this.props;\n const context = this.context;\n const internalState = this.internalState;\n const currentViewport = context.viewport;\n const propsInTransition = this._updateUniformTransition();\n internalState.propsInTransition = propsInTransition;\n // Overwrite this.context.viewport during update to use the last activated viewport on this layer\n // In multi-view applications, a layer may only be drawn in one of the views\n // Which would make the \"active\" viewport different from the shared context\n context.viewport = internalState.viewport || currentViewport;\n // Overwrite this.props during update to use in-transition prop values\n this.props = propsInTransition;\n try {\n const updateParams = this._getUpdateParams();\n const oldModels = this.getModels();\n // Safely call subclass lifecycle methods\n if (context.device) {\n this.updateState(updateParams);\n }\n else {\n try {\n this.updateState(updateParams);\n }\n catch (error) {\n // ignore error if gl context is missing\n }\n }\n // Execute extension updates\n for (const extension of this.props.extensions) {\n extension.updateState.call(this, updateParams, extension);\n }\n const modelChanged = this.getModels()[0] !== oldModels[0];\n this._postUpdate(updateParams, modelChanged);\n // End subclass lifecycle methods\n }\n finally {\n // Restore shared context\n context.viewport = currentViewport;\n this.props = currentProps;\n this._clearChangeFlags();\n internalState.needsUpdate = false;\n internalState.resetOldProps();\n }\n }\n /* eslint-enable max-statements */\n /** (Internal) Called by manager when layer is about to be disposed\n Note: not guaranteed to be called on application shutdown */\n _finalize() {\n debug(TRACE_FINALIZE, this);\n // Call subclass lifecycle method\n this.finalizeState(this.context);\n // Finalize extensions\n for (const extension of this.props.extensions) {\n extension.finalizeState.call(this, this.context, extension);\n }\n }\n // Calculates uniforms\n _drawLayer({ renderPass, moduleParameters = null, uniforms = {}, parameters = {} }) {\n this._updateAttributeTransition();\n const currentProps = this.props;\n const context = this.context;\n // Overwrite this.props during redraw to use in-transition prop values\n // `internalState.propsInTransition` could be missing if `updateState` failed\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n this.props = this.internalState.propsInTransition || currentProps;\n const opacity = this.props.opacity;\n // apply gamma to opacity to make it visually \"linear\"\n uniforms.opacity = Math.pow(opacity, 1 / 2.2);\n try {\n // TODO/ib - hack move to luma Model.draw\n if (moduleParameters) {\n const { isActive, isAttribute } = moduleParameters.picking;\n this.setModuleParameters(moduleParameters);\n this.setShaderModuleProps({ picking: { isActive, isAttribute } });\n }\n // Apply polygon offset to avoid z-fighting\n // TODO - move to draw-layers\n const { getPolygonOffset } = this.props;\n const offsets = (getPolygonOffset && getPolygonOffset(uniforms)) || [0, 0];\n context.device.setParametersWebGL({ polygonOffset: offsets });\n for (const model of this.getModels()) {\n model.setParameters(parameters);\n }\n // Call subclass lifecycle method\n context.device.withParametersWebGL(parameters, () => {\n const opts = { renderPass, moduleParameters, uniforms, parameters, context };\n // extensions\n for (const extension of this.props.extensions) {\n extension.draw.call(this, opts, extension);\n }\n this.draw(opts);\n });\n }\n finally {\n this.props = currentProps;\n }\n // End lifecycle method\n }\n // Helper methods\n /** Returns the current change flags */\n getChangeFlags() {\n return this.internalState?.changeFlags;\n }\n /* eslint-disable complexity */\n /** Dirty some change flags, will be handled by updateLayer */\n setChangeFlags(flags) {\n if (!this.internalState) {\n return;\n }\n const { changeFlags } = this.internalState;\n /* eslint-disable no-fallthrough, max-depth */\n for (const key in flags) {\n if (flags[key]) {\n let flagChanged = false;\n switch (key) {\n case 'dataChanged':\n // changeFlags.dataChanged may be `false`, a string (reason) or an array of ranges\n const dataChangedReason = flags[key];\n const prevDataChangedReason = changeFlags[key];\n if (dataChangedReason && Array.isArray(prevDataChangedReason)) {\n // Merge partial updates\n changeFlags.dataChanged = Array.isArray(dataChangedReason)\n ? prevDataChangedReason.concat(dataChangedReason)\n : dataChangedReason;\n flagChanged = true;\n }\n default:\n if (!changeFlags[key]) {\n changeFlags[key] = flags[key];\n flagChanged = true;\n }\n }\n if (flagChanged) {\n debug(TRACE_CHANGE_FLAG, this, key, flags);\n }\n }\n }\n /* eslint-enable no-fallthrough, max-depth */\n // Update composite flags\n const propsOrDataChanged = Boolean(changeFlags.dataChanged ||\n changeFlags.updateTriggersChanged ||\n changeFlags.propsChanged ||\n changeFlags.extensionsChanged);\n changeFlags.propsOrDataChanged = propsOrDataChanged;\n changeFlags.somethingChanged =\n propsOrDataChanged || changeFlags.viewportChanged || changeFlags.stateChanged;\n }\n /* eslint-enable complexity */\n /** Clear all changeFlags, typically after an update */\n _clearChangeFlags() {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this.internalState.changeFlags = {\n dataChanged: false,\n propsChanged: false,\n updateTriggersChanged: false,\n viewportChanged: false,\n stateChanged: false,\n extensionsChanged: false,\n propsOrDataChanged: false,\n somethingChanged: false\n };\n }\n /** Compares the layers props with old props from a matched older layer\n and extracts change flags that describe what has change so that state\n can be update correctly with minimal effort */\n _diffProps(newProps, oldProps) {\n const changeFlags = diffProps(newProps, oldProps);\n // iterate over changedTriggers\n if (changeFlags.updateTriggersChanged) {\n for (const key in changeFlags.updateTriggersChanged) {\n if (changeFlags.updateTriggersChanged[key]) {\n this.invalidateAttribute(key);\n }\n }\n }\n // trigger uniform transitions\n if (changeFlags.transitionsChanged) {\n for (const key in changeFlags.transitionsChanged) {\n // prop changed and transition is enabled\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.uniformTransitions.add(key, oldProps[key], newProps[key], newProps.transitions?.[key]);\n }\n }\n return this.setChangeFlags(changeFlags);\n }\n /** (Internal) called by layer manager to perform extra props validation (in development only) */\n validateProps() {\n validateProps(this.props);\n }\n /** (Internal) Called by deck picker when the hovered object changes to update the auto highlight */\n updateAutoHighlight(info) {\n if (this.props.autoHighlight && !Number.isInteger(this.props.highlightedObjectIndex)) {\n this._updateAutoHighlight(info);\n }\n }\n // May be overriden by subclasses\n // TODO - simplify subclassing interface\n /** Update picking module parameters to highlight the hovered object */\n _updateAutoHighlight(info) {\n const picking = {\n highlightedObjectColor: info.picked ? info.color : null\n };\n const { highlightColor } = this.props;\n if (info.picked && typeof highlightColor === 'function') {\n picking.highlightColor = highlightColor(info);\n }\n this.setShaderModuleProps({ picking });\n // setShaderModuleProps does not trigger redraw\n this.setNeedsRedraw();\n }\n /** Create new attribute manager */\n _getAttributeManager() {\n const context = this.context;\n return new AttributeManager(context.device, {\n id: this.props.id,\n stats: context.stats,\n timeline: context.timeline\n });\n }\n // Private methods\n /** Called after updateState to perform common tasks */\n _postUpdate(updateParams, forceUpdate) {\n const { props, oldProps } = updateParams;\n this.setNeedsRedraw();\n // Check if attributes need recalculation\n this._updateAttributes();\n // Note: Automatic instance count update only works for single layers\n const model = this.state.model;\n if (model?.isInstanced) {\n model.setInstanceCount(this.getNumInstances());\n }\n // Set picking module parameters to match props\n const { autoHighlight, highlightedObjectIndex, highlightColor } = props;\n if (forceUpdate ||\n oldProps.autoHighlight !== autoHighlight ||\n oldProps.highlightedObjectIndex !== highlightedObjectIndex ||\n oldProps.highlightColor !== highlightColor) {\n const picking = {};\n if (!autoHighlight) {\n picking.highlightedObjectColor = null;\n }\n if (Array.isArray(highlightColor)) {\n picking.highlightColor = highlightColor;\n }\n // highlightedObjectIndex will overwrite any settings from auto highlighting.\n // Do not reset unless the value has changed.\n if (forceUpdate || highlightedObjectIndex !== oldProps.highlightedObjectIndex) {\n picking.highlightedObjectColor =\n Number.isFinite(highlightedObjectIndex) && highlightedObjectIndex >= 0\n ? this.encodePickingColor(highlightedObjectIndex)\n : null;\n }\n this.setShaderModuleProps({ picking });\n }\n }\n _getUpdateParams() {\n return {\n props: this.props,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n oldProps: this.internalState.getOldProps(),\n context: this.context,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n changeFlags: this.internalState.changeFlags\n };\n }\n /** Checks state of attributes and model */\n _getNeedsRedraw(opts) {\n // this method may be called by the render loop as soon a the layer\n // has been created, so guard against uninitialized state\n if (!this.internalState) {\n return false;\n }\n let redraw = false;\n redraw = redraw || (this.internalState.needsRedraw && this.id);\n // TODO - is attribute manager needed? - Model should be enough.\n const attributeManager = this.getAttributeManager();\n const attributeManagerNeedsRedraw = attributeManager\n ? attributeManager.getNeedsRedraw(opts)\n : false;\n redraw = redraw || attributeManagerNeedsRedraw;\n if (redraw) {\n for (const extension of this.props.extensions) {\n extension.onNeedsRedraw.call(this, extension);\n }\n }\n this.internalState.needsRedraw = this.internalState.needsRedraw && !opts.clearRedrawFlags;\n return redraw;\n }\n /** Callback when asyn prop is loaded */\n _onAsyncPropUpdated() {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this._diffProps(this.props, this.internalState.getOldProps());\n this.setNeedsUpdate();\n }\n}\n","import { cloneElement } from 'react';\nconst MAP_STYLE = { position: 'absolute', zIndex: -1 };\nexport default function evaluateChildren(children, childProps) {\n if (typeof children === 'function') {\n return children(childProps);\n }\n if (Array.isArray(children)) {\n return children.map(child => evaluateChildren(child, childProps));\n }\n if (isComponent(children)) {\n // Special treatment for react-map-gl's Map component\n // to support shorthand use case \n if (isReactMap(children)) {\n // Place map under the canvas\n childProps.style = MAP_STYLE;\n return cloneElement(children, childProps);\n }\n if (needsDeckGLViewProps(children)) {\n return cloneElement(children, childProps);\n }\n }\n return children;\n}\nexport function isComponent(child) {\n return (child && typeof child === 'object' && 'type' in child) || false;\n}\nfunction isReactMap(child) {\n return child.props?.mapStyle;\n}\nfunction needsDeckGLViewProps(child) {\n const componentClass = child.type;\n // @ts-expect-error deckGLViewProps is a custom hack defined on the constructor (nebula.gl)\n return componentClass && componentClass.deckGLViewProps;\n}\n","import * as React from 'react';\nimport { createElement } from 'react';\nimport { inheritsFrom } from \"./inherits-from.js\";\nimport { Layer, View } from '@deck.gl/core';\nimport { isComponent } from \"./evaluate-children.js\";\n// recursively wrap render callbacks in `View`\nfunction wrapInView(node) {\n if (typeof node === 'function') {\n // React.Children does not traverse functions.\n // All render callbacks must be protected under a \n // @ts-expect-error View is not a ReactJSXElement constructor. Only used as a temporary wrapper and will be removed in extractJSXLayers\n return createElement(View, {}, node);\n }\n if (Array.isArray(node)) {\n return node.map(wrapInView);\n }\n if (isComponent(node)) {\n if (node.type === React.Fragment) {\n return wrapInView(node.props.children);\n }\n if (inheritsFrom(node.type, View)) {\n return node;\n }\n }\n return node;\n}\n// extracts any deck.gl layers masquerading as react elements from props.children\nexport default function extractJSXLayers({ children, layers = [], views = null }) {\n const reactChildren = []; // extract real react elements (i.e. not deck.gl layers)\n const jsxLayers = []; // extracted layer from react children, will add to deck.gl layer array\n const jsxViews = {};\n // React.children\n React.Children.forEach(wrapInView(children), reactElement => {\n if (isComponent(reactElement)) {\n // For some reason Children.forEach doesn't filter out `null`s\n const ElementType = reactElement.type;\n if (inheritsFrom(ElementType, Layer)) {\n const layer = createLayer(ElementType, reactElement.props);\n jsxLayers.push(layer);\n }\n else {\n reactChildren.push(reactElement);\n }\n // empty id => default view\n if (inheritsFrom(ElementType, View) && ElementType !== View && reactElement.props.id) {\n // @ts-ignore Cannot instantiate an abstract class (View)\n const view = new ElementType(reactElement.props);\n jsxViews[view.id] = view;\n }\n }\n else if (reactElement) {\n reactChildren.push(reactElement);\n }\n });\n // Avoid modifying views if no JSX views were found\n if (Object.keys(jsxViews).length > 0) {\n // If a view is specified in both views prop and JSX, use the one in views\n if (Array.isArray(views)) {\n views.forEach(view => {\n jsxViews[view.id] = view;\n });\n }\n else if (views) {\n jsxViews[views.id] = views;\n }\n views = Object.values(jsxViews);\n }\n // Avoid modifying layers array if no JSX layers were found\n layers = jsxLayers.length > 0 ? [...jsxLayers, ...layers] : layers;\n return { layers, children: reactChildren, views };\n}\nfunction createLayer(LayerType, reactProps) {\n const props = {};\n // Layer.defaultProps is treated as ReactElement.defaultProps and merged into react props\n // Remove them\n const defaultProps = LayerType.defaultProps || {};\n for (const key in reactProps) {\n if (defaultProps[key] !== reactProps[key]) {\n props[key] = reactProps[key];\n }\n }\n // @ts-ignore Cannot instantiate an abstract class (Layer)\n return new LayerType(props);\n}\n","const CANVAS_ONLY_STYLES = {\n mixBlendMode: null\n};\nexport default function extractStyles({ width, height, style }) {\n // This styling is enforced for correct positioning with children\n const containerStyle = {\n position: 'absolute',\n zIndex: 0,\n left: 0,\n top: 0,\n width,\n height\n };\n // Fill the container\n const canvasStyle = {\n left: 0,\n top: 0\n };\n if (style) {\n for (const key in style) {\n if (key in CANVAS_ONLY_STYLES) {\n // apply style to the canvas, but not deck's children, e.g. mix-blend-mode\n canvasStyle[key] = style[key];\n }\n else {\n // apply style to the container, e.g. position/flow settings\n containerStyle[key] = style[key];\n }\n }\n }\n return { containerStyle, canvasStyle };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport * as React from 'react';\nimport { createElement, useRef, useState, useMemo, useEffect, useImperativeHandle } from 'react';\nimport { Deck } from '@deck.gl/core';\nimport useIsomorphicLayoutEffect from \"./utils/use-isomorphic-layout-effect.js\";\nimport extractJSXLayers from \"./utils/extract-jsx-layers.js\";\nimport positionChildrenUnderViews from \"./utils/position-children-under-views.js\";\nimport extractStyles from \"./utils/extract-styles.js\";\nfunction getRefHandles(thisRef) {\n return {\n get deck() {\n return thisRef.deck;\n },\n // The following method can only be called after ref is available, by which point deck is defined in useEffect\n pickObject: opts => thisRef.deck.pickObject(opts),\n pickMultipleObjects: opts => thisRef.deck.pickMultipleObjects(opts),\n pickObjects: opts => thisRef.deck.pickObjects(opts)\n };\n}\nfunction redrawDeck(thisRef) {\n if (thisRef.redrawReason) {\n // Only redraw if we have received a dirty flag\n // @ts-expect-error accessing protected method\n thisRef.deck._drawLayers(thisRef.redrawReason);\n thisRef.redrawReason = null;\n }\n}\nfunction createDeckInstance(thisRef, DeckClass, props) {\n const deck = new DeckClass({\n ...props,\n // The Deck's animation loop is independent from React's render cycle, causing potential\n // synchronization issues. We provide this custom render function to make sure that React\n // and Deck update on the same schedule.\n _customRender: redrawReason => {\n // Save the dirty flag for later\n thisRef.redrawReason = redrawReason;\n // Viewport/view state is passed to child components as props.\n // If they have changed, we need to trigger a React rerender to update children props.\n const viewports = deck.getViewports();\n if (thisRef.lastRenderedViewports !== viewports) {\n // Viewports have changed, update children props first.\n // This will delay the Deck canvas redraw till after React update (in useLayoutEffect)\n // so that the canvas does not get rendered before the child components update.\n thisRef.forceUpdate();\n }\n else {\n redrawDeck(thisRef);\n }\n }\n });\n return deck;\n}\nfunction DeckGLWithRef(props, ref) {\n // A mechanism to force redraw\n const [version, setVersion] = useState(0);\n // A reference to persistent states\n const _thisRef = useRef({\n control: null,\n version,\n forceUpdate: () => setVersion(v => v + 1)\n });\n const thisRef = _thisRef.current;\n // DOM refs\n const containerRef = useRef(null);\n const canvasRef = useRef(null);\n // extract any deck.gl layers masquerading as react elements from props.children\n const jsxProps = useMemo(() => extractJSXLayers(props), [props.layers, props.views, props.children]);\n // Callbacks\n let inRender = true;\n const handleViewStateChange = params => {\n if (inRender && props.viewState) {\n // Callback may invoke a state update. Defer callback to after render() to avoid React error\n // In React StrictMode, render is executed twice and useEffect/useLayoutEffect is executed once\n // Store deferred parameters in ref so that we can access it in another render\n thisRef.viewStateUpdateRequested = params;\n return null;\n }\n thisRef.viewStateUpdateRequested = null;\n return props.onViewStateChange?.(params);\n };\n const handleInteractionStateChange = params => {\n if (inRender) {\n // Callback may invoke a state update. Defer callback to after render() to avoid React error\n // In React StrictMode, render is executed twice and useEffect/useLayoutEffect is executed once\n // Store deferred parameters in ref so that we can access it in another render\n thisRef.interactionStateUpdateRequested = params;\n }\n else {\n thisRef.interactionStateUpdateRequested = null;\n props.onInteractionStateChange?.(params);\n }\n };\n // Update Deck's props. If Deck needs redraw, this will trigger a call to `_customRender` in\n // the next animation frame.\n // Needs to be called both from initial mount, and when new props are received\n const deckProps = useMemo(() => {\n const forwardProps = {\n ...props,\n // Override user styling props. We will set the canvas style in render()\n style: null,\n width: '100%',\n height: '100%',\n parent: containerRef.current,\n canvas: canvasRef.current,\n layers: jsxProps.layers,\n views: jsxProps.views,\n onViewStateChange: handleViewStateChange,\n onInteractionStateChange: handleInteractionStateChange\n };\n // The defaultValue for _customRender is null, which would overwrite the definition\n // of _customRender. Remove to avoid frequently redeclaring the method here.\n delete forwardProps._customRender;\n if (thisRef.deck) {\n thisRef.deck.setProps(forwardProps);\n }\n return forwardProps;\n }, [props]);\n useEffect(() => {\n const DeckClass = props.Deck || Deck;\n thisRef.deck = createDeckInstance(thisRef, DeckClass, {\n ...deckProps,\n parent: containerRef.current,\n canvas: canvasRef.current\n });\n return () => thisRef.deck?.finalize();\n }, []);\n useIsomorphicLayoutEffect(() => {\n // render has just been called. The children are positioned based on the current view state.\n // Redraw Deck canvas immediately, if necessary, using the current view state, so that it\n // matches the child components.\n redrawDeck(thisRef);\n // Execute deferred callbacks\n const { viewStateUpdateRequested, interactionStateUpdateRequested } = thisRef;\n if (viewStateUpdateRequested) {\n handleViewStateChange(viewStateUpdateRequested);\n }\n if (interactionStateUpdateRequested) {\n handleInteractionStateChange(interactionStateUpdateRequested);\n }\n });\n useImperativeHandle(ref, () => getRefHandles(thisRef), []);\n const currentViewports = thisRef.deck && thisRef.deck.isInitialized ? thisRef.deck.getViewports() : undefined;\n const { ContextProvider, width = '100%', height = '100%', id, style } = props;\n const { containerStyle, canvasStyle } = useMemo(() => extractStyles({ width, height, style }), [width, height, style]);\n // Props changes may lead to 3 types of updates:\n // 1. Only the WebGL canvas - updated in Deck's render cycle (next animation frame)\n // 2. Only the DOM - updated in React's lifecycle (now)\n // 3. Both the WebGL canvas and the DOM - defer React rerender to next animation frame just\n // before Deck redraw to ensure perfect synchronization & avoid excessive redraw\n // This is because multiple changes may happen to Deck between two frames e.g. transition\n if ((!thisRef.viewStateUpdateRequested && thisRef.lastRenderedViewports === currentViewports) || // case 2\n thisRef.version !== version // case 3 just before deck redraws\n ) {\n thisRef.lastRenderedViewports = currentViewports;\n thisRef.version = version;\n // Render the background elements (typically react-map-gl instances)\n // using the view descriptors\n const childrenUnderViews = positionChildrenUnderViews({\n children: jsxProps.children,\n deck: thisRef.deck,\n ContextProvider\n });\n const canvas = createElement('canvas', {\n key: 'canvas',\n id: id || 'deckgl-overlay',\n ref: canvasRef,\n style: canvasStyle\n });\n // Render deck.gl as the last child\n thisRef.control = createElement('div', { id: `${id || 'deckgl'}-wrapper`, ref: containerRef, style: containerStyle }, [canvas, childrenUnderViews]);\n }\n inRender = false;\n return thisRef.control;\n}\nconst DeckGL = React.forwardRef(DeckGLWithRef);\nexport default DeckGL;\n","import { createElement } from 'react';\nimport { View } from '@deck.gl/core';\nimport { inheritsFrom } from \"./inherits-from.js\";\nimport evaluateChildren, { isComponent } from \"./evaluate-children.js\";\n// Iterate over views and reposition children associated with views\n// TODO - Can we supply a similar function for the non-React case?\nexport default function positionChildrenUnderViews({ children, deck, ContextProvider }) {\n // @ts-expect-error accessing protected property\n const { viewManager } = deck || {};\n if (!viewManager || !viewManager.views.length) {\n return [];\n }\n const views = {};\n const defaultViewId = viewManager.views[0].id;\n // Sort children by view id\n for (const child of children) {\n // Unless child is a View, position / render as part of the default view\n let viewId = defaultViewId;\n let viewChildren = child;\n if (isComponent(child) && inheritsFrom(child.type, View)) {\n viewId = child.props.id || defaultViewId;\n viewChildren = child.props.children;\n }\n const viewport = viewManager.getViewport(viewId);\n const viewState = viewManager.getViewState(viewId);\n // Drop (auto-hide) elements with viewId that are not matched by any current view\n if (viewport) {\n viewState.padding = viewport.padding;\n const { x, y, width, height } = viewport;\n // Resolve potentially relative dimensions using the deck.gl container size\n viewChildren = evaluateChildren(viewChildren, {\n x,\n y,\n width,\n height,\n viewport,\n viewState\n });\n if (!views[viewId]) {\n views[viewId] = {\n viewport,\n children: []\n };\n }\n views[viewId].children.push(viewChildren);\n }\n }\n // Render views\n return Object.keys(views).map(viewId => {\n const { viewport, children: viewChildren } = views[viewId];\n const { x, y, width, height } = viewport;\n const style = {\n position: 'absolute',\n left: x,\n top: y,\n width,\n height\n };\n const key = `view-${viewId}`;\n // If children is passed as an array, React will throw the \"each element in a list needs\n // a key\" warning. Sending each child as separate arguments removes this requirement.\n const viewElement = createElement('div', { key, id: key, style }, ...viewChildren);\n if (ContextProvider) {\n const contextValue = {\n viewport,\n // @ts-expect-error accessing protected property\n container: deck.canvas.offsetParent,\n // @ts-expect-error accessing protected property\n eventManager: deck.eventManager,\n onViewStateChange: params => {\n params.viewId = viewId;\n // @ts-expect-error accessing protected method\n deck._onViewStateChange(params);\n }\n };\n return createElement(ContextProvider, { key, value: contextValue }, viewElement);\n }\n return viewElement;\n });\n}\n","\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH$3) ||\n flush === Z_NO_FLUSH$2 ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR$2;\n }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\n/* ========================================================================= */\nconst deflate$2 = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 16209; /* got a data error -- remain here until reset */\nconst TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS$1) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n const threshold = 1000 / freq;\n let timer = null;\n return function throttled() {\n const force = this === true;\n\n const now = Date.now();\n if (force || now - timestamp > threshold) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n timestamp = now;\n return fn.apply(null, arguments);\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n timestamp = Date.now();\n return fn.apply(null, arguments);\n }, threshold - (now - timestamp));\n }\n };\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n }, freq);\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType} = _config;\n let onCanceled;\n function done() {\n if (_config.cancelToken) {\n _config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (_config.signal) {\n _config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n _config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (typeof _config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof _config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\n\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n const {done, value} = await iterator.next();\n\n if (done) {\n controller.close();\n onFinish();\n return;\n }\n\n let len = value.byteLength;\n onProgress && onProgress(bytes += len);\n controller.enqueue(new Uint8Array(value));\n },\n cancel(reason) {\n onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n const lengthComputable = total != null;\n return (loaded) => setTimeout(() => fn({\n lengthComputable,\n total,\n loaded\n }));\n}\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n try {\n return utils.isReadableStream(new Response('').body);\n } catch(err) {\n // return undefined\n }\n})();\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n requestContentLength,\n progressEventReducer(onUploadProgress)\n ), null, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'cors' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n responseContentLength,\n progressEventReducer(onDownloadProgress, true)\n ), isStreamResponse && onFinish, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import pako from \"pako\";\nimport axios from \"axios\";\n\nconst basename = (process.env.PUBLIC_URL || \"\").replace(\"//\", \"/\");\n\nexport const csv2object = (csvString) => {\n const lines = csvString.split(\"\\n\");\n const headers = lines[0].split(\",\");\n const result = [];\n for (let i = 1; i < lines.length; i++) {\n const obj = {};\n const currentLine = lines[i].split(\",\");\n headers.forEach((header, j) => {\n obj[header.trim()] = currentLine[j] || \"\";\n });\n result.push(obj);\n }\n\n return result;\n};\n\nexport const object2feature = (listObject) => {\n return {\n type: \"FeatureCollection\",\n features: listObject.map((i) => ({\n type: \"Feature\",\n properties: {\n amenity: i.amenity,\n name: i.name,\n id: i.id,\n },\n geometry: {\n type: \"Point\",\n coordinates: [parseFloat(i.longitude), parseFloat(i.latitude)],\n },\n })),\n };\n};\n\nexport const fetchLocalCsv = async ( name_code, source ) => {\n try {\n const responseSchool = await axios.get(\n `${basename}/assets/csv_file/${name_code}_${source}.csv.gz`,\n {\n responseType: \"arraybuffer\",\n }\n );\n const responseSchoolString = pako.inflate(responseSchool.data, {\n to: \"string\",\n });\n let schoolObject = object2feature(csv2object(responseSchoolString));\n return schoolObject;\n\n } catch (err) {\n console.error(err);\n return null;\n }\n\n};\n","export var IconsManifest = [\n {\n \"id\": \"ci\",\n \"name\": \"Circum Icons\",\n \"projectUrl\": \"https://circumicons.com/\",\n \"license\": \"MPL-2.0 license\",\n \"licenseUrl\": \"https://github.com/Klarr-Agency/Circum-Icons/blob/main/LICENSE\"\n },\n {\n \"id\": \"fa\",\n \"name\": \"Font Awesome 5\",\n \"projectUrl\": \"https://fontawesome.com/\",\n \"license\": \"CC BY 4.0 License\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n },\n {\n \"id\": \"fa6\",\n \"name\": \"Font Awesome 6\",\n \"projectUrl\": \"https://fontawesome.com/\",\n \"license\": \"CC BY 4.0 License\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n },\n {\n \"id\": \"io\",\n \"name\": \"Ionicons 4\",\n \"projectUrl\": \"https://ionicons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/ionic-team/ionicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"io5\",\n \"name\": \"Ionicons 5\",\n \"projectUrl\": \"https://ionicons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/ionic-team/ionicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"md\",\n \"name\": \"Material Design icons\",\n \"projectUrl\": \"http://google.github.io/material-design-icons/\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"https://github.com/google/material-design-icons/blob/master/LICENSE\"\n },\n {\n \"id\": \"ti\",\n \"name\": \"Typicons\",\n \"projectUrl\": \"http://s-ings.com/typicons/\",\n \"license\": \"CC BY-SA 3.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by-sa/3.0/\"\n },\n {\n \"id\": \"go\",\n \"name\": \"Github Octicons icons\",\n \"projectUrl\": \"https://octicons.github.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/primer/octicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"fi\",\n \"name\": \"Feather\",\n \"projectUrl\": \"https://feathericons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/feathericons/feather/blob/master/LICENSE\"\n },\n {\n \"id\": \"lu\",\n \"name\": \"Lucide\",\n \"projectUrl\": \"https://lucide.dev/\",\n \"license\": \"ISC\",\n \"licenseUrl\": \"https://github.com/lucide-icons/lucide/blob/main/LICENSE\"\n },\n {\n \"id\": \"gi\",\n \"name\": \"Game Icons\",\n \"projectUrl\": \"https://game-icons.net/\",\n \"license\": \"CC BY 3.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/3.0/\"\n },\n {\n \"id\": \"wi\",\n \"name\": \"Weather Icons\",\n \"projectUrl\": \"https://erikflowers.github.io/weather-icons/\",\n \"license\": \"SIL OFL 1.1\",\n \"licenseUrl\": \"http://scripts.sil.org/OFL\"\n },\n {\n \"id\": \"di\",\n \"name\": \"Devicons\",\n \"projectUrl\": \"https://vorillaz.github.io/devicons/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"ai\",\n \"name\": \"Ant Design Icons\",\n \"projectUrl\": \"https://github.com/ant-design/ant-design-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"bs\",\n \"name\": \"Bootstrap Icons\",\n \"projectUrl\": \"https://github.com/twbs/icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"ri\",\n \"name\": \"Remix Icon\",\n \"projectUrl\": \"https://github.com/Remix-Design/RemixIcon\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"http://www.apache.org/licenses/\"\n },\n {\n \"id\": \"fc\",\n \"name\": \"Flat Color Icons\",\n \"projectUrl\": \"https://github.com/icons8/flat-color-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"gr\",\n \"name\": \"Grommet-Icons\",\n \"projectUrl\": \"https://github.com/grommet/grommet-icons\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"http://www.apache.org/licenses/\"\n },\n {\n \"id\": \"hi\",\n \"name\": \"Heroicons\",\n \"projectUrl\": \"https://github.com/tailwindlabs/heroicons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"hi2\",\n \"name\": \"Heroicons 2\",\n \"projectUrl\": \"https://github.com/tailwindlabs/heroicons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"si\",\n \"name\": \"Simple Icons\",\n \"projectUrl\": \"https://simpleicons.org/\",\n \"license\": \"CC0 1.0 Universal\",\n \"licenseUrl\": \"https://creativecommons.org/publicdomain/zero/1.0/\"\n },\n {\n \"id\": \"sl\",\n \"name\": \"Simple Line Icons\",\n \"projectUrl\": \"https://thesabbir.github.io/simple-line-icons/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"im\",\n \"name\": \"IcoMoon Free\",\n \"projectUrl\": \"https://github.com/Keyamoon/IcoMoon-Free\",\n \"license\": \"CC BY 4.0 License\",\n \"licenseUrl\": \"https://github.com/Keyamoon/IcoMoon-Free/blob/master/License.txt\"\n },\n {\n \"id\": \"bi\",\n \"name\": \"BoxIcons\",\n \"projectUrl\": \"https://github.com/atisawd/boxicons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/atisawd/boxicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"cg\",\n \"name\": \"css.gg\",\n \"projectUrl\": \"https://github.com/astrit/css.gg\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"vsc\",\n \"name\": \"VS Code Icons\",\n \"projectUrl\": \"https://github.com/microsoft/vscode-codicons\",\n \"license\": \"CC BY 4.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n },\n {\n \"id\": \"tb\",\n \"name\": \"Tabler Icons\",\n \"projectUrl\": \"https://github.com/tabler/tabler-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"tfi\",\n \"name\": \"Themify Icons\",\n \"projectUrl\": \"https://github.com/lykmapipo/themify-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/thecreation/standard-icons/blob/master/modules/themify-icons/LICENSE\"\n },\n {\n \"id\": \"rx\",\n \"name\": \"Radix Icons\",\n \"projectUrl\": \"https://icons.radix-ui.com\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/radix-ui/icons/blob/master/LICENSE\"\n },\n {\n \"id\": \"pi\",\n \"name\": \"Phosphor Icons\",\n \"projectUrl\": \"https://github.com/phosphor-icons/core\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/phosphor-icons/core/blob/main/LICENSE\"\n },\n {\n \"id\": \"lia\",\n \"name\": \"Icons8 Line Awesome\",\n \"projectUrl\": \"https://icons8.com/line-awesome\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/icons8/line-awesome/blob/master/LICENSE.md\"\n }\n]","import React from \"react\";\nexport var DefaultContext = {\n color: undefined,\n size: undefined,\n className: undefined,\n style: undefined,\n attr: undefined\n};\nexport var IconContext = React.createContext && /*#__PURE__*/React.createContext(DefaultContext);","var _excluded = [\"attr\", \"size\", \"title\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React from \"react\";\nimport { IconContext, DefaultContext } from \"./iconContext.mjs\";\nfunction Tree2Element(tree) {\n return tree && tree.map((node, i) => /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n key: i\n }, node.attr), Tree2Element(node.child)));\n}\nexport function GenIcon(data) {\n return props => /*#__PURE__*/React.createElement(IconBase, _extends({\n attr: _objectSpread({}, data.attr)\n }, props), Tree2Element(data.child));\n}\nexport function IconBase(props) {\n var elem = conf => {\n var {\n attr,\n size,\n title\n } = props,\n svgProps = _objectWithoutProperties(props, _excluded);\n var computedSize = size || conf.size || \"1em\";\n var className;\n if (conf.className) className = conf.className;\n if (props.className) className = (className ? className + \" \" : \"\") + props.className;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n stroke: \"currentColor\",\n fill: \"currentColor\",\n strokeWidth: \"0\"\n }, conf.attr, attr, svgProps, {\n className: className,\n style: _objectSpread(_objectSpread({\n color: props.color || conf.color\n }, conf.style), props.style),\n height: computedSize,\n width: computedSize,\n xmlns: \"http://www.w3.org/2000/svg\"\n }), title && /*#__PURE__*/React.createElement(\"title\", null, title), props.children);\n };\n return IconContext !== undefined ? /*#__PURE__*/React.createElement(IconContext.Consumer, null, conf => elem(conf)) : elem(DefaultContext);\n}","// THIS FILE IS AUTO GENERATED\nimport { GenIcon } from '../lib/index.mjs';\nexport function FiActivity (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 12 18 12 15 21 9 3 6 12 2 12\"},\"child\":[]}]})(props);\n};\nexport function FiAirplay (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 15 17 21 7 21 12 15\"},\"child\":[]}]})(props);\n};\nexport function FiAlertCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiAlertOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiAlertTriangle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12.01\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiAlignCenter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"10\",\"x2\":\"6\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"18\",\"x2\":\"6\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignJustify (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"10\",\"x2\":\"3\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"10\",\"x2\":\"3\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"10\",\"x2\":\"7\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"7\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAnchor (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12H2a10 10 0 0 0 20 0h-3\"},\"child\":[]}]})(props);\n};\nexport function FiAperture (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.31\",\"y1\":\"8\",\"x2\":\"20.05\",\"y2\":\"17.94\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9.69\",\"y1\":\"8\",\"x2\":\"21.17\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7.38\",\"y1\":\"12\",\"x2\":\"13.12\",\"y2\":\"2.06\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9.69\",\"y1\":\"16\",\"x2\":\"3.95\",\"y2\":\"6.06\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.31\",\"y1\":\"16\",\"x2\":\"2.83\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.62\",\"y1\":\"12\",\"x2\":\"10.88\",\"y2\":\"21.94\"},\"child\":[]}]})(props);\n};\nexport function FiArchive (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 8 21 21 3 21 3 8\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"3\",\"width\":\"22\",\"height\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"12\",\"x2\":\"14\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 12 12 16 16 12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"7\",\"x2\":\"7\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 17 7 17 7 7\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"7\",\"x2\":\"17\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 7 17 17 7 17\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"5\",\"x2\":\"12\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 12 12 19 5 12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowLeftCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 8 8 12 12 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"12\",\"x2\":\"8\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"12\",\"x2\":\"5\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 19 5 12 12 5\"},\"child\":[]}]})(props);\n};\nexport function FiArrowRightCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 16 16 12 12 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 5 19 12 12 19\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 12 12 8 8 12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"17\",\"x2\":\"7\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 17 7 7 17 7\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"17\",\"x2\":\"17\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 7 17 7 17 17\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"5 12 12 5 19 12\"},\"child\":[]}]})(props);\n};\nexport function FiAtSign (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"},\"child\":[]}]})(props);\n};\nexport function FiAward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"8\",\"r\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"},\"child\":[]}]})(props);\n};\nexport function FiBarChart2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"20\",\"x2\":\"18\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"20\",\"x2\":\"6\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiBarChart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"20\",\"x2\":\"18\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"20\",\"x2\":\"6\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiBatteryCharging (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"13\",\"x2\":\"23\",\"y2\":\"11\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"11 6 7 12 13 12 9 18\"},\"child\":[]}]})(props);\n};\nexport function FiBattery (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"6\",\"width\":\"18\",\"height\":\"12\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"13\",\"x2\":\"23\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiBellOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.73 21a2 2 0 0 1-3.46 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.63 13A17.89 17.89 0 0 1 18 8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8a6 6 0 0 0-9.33-5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiBell (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.73 21a2 2 0 0 1-3.46 0\"},\"child\":[]}]})(props);\n};\nexport function FiBluetooth (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\"},\"child\":[]}]})(props);\n};\nexport function FiBold (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"},\"child\":[]}]})(props);\n};\nexport function FiBookOpen (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"},\"child\":[]}]})(props);\n};\nexport function FiBook (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"},\"child\":[]}]})(props);\n};\nexport function FiBookmark (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiBox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiBriefcase (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"},\"child\":[]}]})(props);\n};\nexport function FiCalendar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"4\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"2\",\"x2\":\"16\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"2\",\"x2\":\"8\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"10\",\"x2\":\"21\",\"y2\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiCameraOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\"},\"child\":[]}]})(props);\n};\nexport function FiCamera (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"13\",\"r\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiCast (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"20\",\"x2\":\"2.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiCheckCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 4 12 14.01 9 11.01\"},\"child\":[]}]})(props);\n};\nexport function FiCheckSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 11 12 14 22 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"},\"child\":[]}]})(props);\n};\nexport function FiCheck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 6 9 17 4 12\"},\"child\":[]}]})(props);\n};\nexport function FiChevronDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 9 12 15 18 9\"},\"child\":[]}]})(props);\n};\nexport function FiChevronLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 18 9 12 15 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 18 15 12 9 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"18 15 12 9 6 15\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 13 12 18 17 13\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 6 12 11 17 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"11 17 6 12 11 7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"18 17 13 12 18 7\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 17 18 12 13 7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 17 11 12 6 7\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 11 12 6 7 11\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 18 12 13 7 18\"},\"child\":[]}]})(props);\n};\nexport function FiChrome (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21.17\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3.95\",\"y1\":\"6.06\",\"x2\":\"8.54\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10.88\",\"y1\":\"21.94\",\"x2\":\"15.46\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiClipboard (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"8\",\"y\":\"2\",\"width\":\"8\",\"height\":\"4\",\"rx\":\"1\",\"ry\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiClock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 6 12 12 16 14\"},\"child\":[]}]})(props);\n};\nexport function FiCloudDrizzle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"19\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"19\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"16\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"},\"child\":[]}]})(props);\n};\nexport function FiCloudLightning (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 11 9 17 15 17 11 23\"},\"child\":[]}]})(props);\n};\nexport function FiCloudOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiCloudRain (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"},\"child\":[]}]})(props);\n};\nexport function FiCloudSnow (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"16\",\"x2\":\"8.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"20\",\"x2\":\"8.01\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12.01\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"16\",\"x2\":\"16.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"20\",\"x2\":\"16.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\"},\"child\":[]}]})(props);\n};\nexport function FiCode (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 18 22 12 16 6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 6 2 12 8 18\"},\"child\":[]}]})(props);\n};\nexport function FiCodepen (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"15.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 8.5 12 15.5 2 8.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 15.5 12 8.5 22 15.5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"8.5\"},\"child\":[]}]})(props);\n};\nexport function FiCodesandbox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7.5 4.21 12 6.81 16.5 4.21\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7.5 19.79 7.5 14.6 3 12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 12 16.5 14.6 16.5 19.79\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiCoffee (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8h1a4 4 0 0 1 0 8h-1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"1\",\"x2\":\"6\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"1\",\"x2\":\"10\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"1\",\"x2\":\"14\",\"y2\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiColumns (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\"},\"child\":[]}]})(props);\n};\nexport function FiCommand (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\"},\"child\":[]}]})(props);\n};\nexport function FiCompass (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"},\"child\":[]}]})(props);\n};\nexport function FiCopy (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"13\",\"height\":\"13\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"},\"child\":[]}]})(props);\n};\nexport function FiCornerDownLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 10 4 15 9 20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 4v7a4 4 0 0 1-4 4H4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerDownRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 10 20 15 15 20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4v7a4 4 0 0 0 4 4h12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerLeftDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 15 9 20 4 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 4h-7a4 4 0 0 0-4 4v12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerLeftUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 9 9 4 4 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 20h-7a4 4 0 0 1-4-4V4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerRightDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 15 15 20 20 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4h7a4 4 0 0 1 4 4v12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerRightUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 9 15 4 20 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 20h7a4 4 0 0 0 4-4V4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerUpLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 14 4 9 9 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 20v-7a4 4 0 0 0-4-4H4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerUpRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 14 20 9 15 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 20v-7a4 4 0 0 1 4-4h12\"},\"child\":[]}]})(props);\n};\nexport function FiCpu (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"4\",\"width\":\"16\",\"height\":\"16\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"1\",\"x2\":\"9\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"1\",\"x2\":\"15\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"20\",\"x2\":\"9\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"20\",\"x2\":\"15\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"9\",\"x2\":\"23\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"14\",\"x2\":\"23\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"9\",\"x2\":\"4\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"14\",\"x2\":\"4\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiCreditCard (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"4\",\"width\":\"22\",\"height\":\"16\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"10\",\"x2\":\"23\",\"y2\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiCrop (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.13 1L6 16a2 2 0 0 0 2 2h15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1 6.13L16 6a2 2 0 0 1 2 2v15\"},\"child\":[]}]})(props);\n};\nexport function FiCrosshair (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"12\",\"x2\":\"18\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"12\",\"x2\":\"2\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"6\",\"x2\":\"12\",\"y2\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiDatabase (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"ellipse\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"rx\":\"9\",\"ry\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"},\"child\":[]}]})(props);\n};\nexport function FiDelete (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"18\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiDisc (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiDivideCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiDivideSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiDivide (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"6\",\"r\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"18\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiDollarSign (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"1\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"},\"child\":[]}]})(props);\n};\nexport function FiDownloadCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 17 12 21 16 17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"12\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"},\"child\":[]}]})(props);\n};\nexport function FiDownload (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 10 12 15 17 10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiDribbble (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\"},\"child\":[]}]})(props);\n};\nexport function FiDroplet (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit3 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 20h9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"},\"child\":[]}]})(props);\n};\nexport function FiExternalLink (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 3 21 3 21 9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"14\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiEyeOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiEye (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiFacebook (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"},\"child\":[]}]})(props);\n};\nexport function FiFastForward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"13 19 22 12 13 5 13 19\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"2 19 11 12 2 5 2 19\"},\"child\":[]}]})(props);\n};\nexport function FiFeather (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"8\",\"x2\":\"2\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.5\",\"y1\":\"15\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFigma (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\"},\"child\":[]}]})(props);\n};\nexport function FiFileMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"15\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFilePlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"15\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFileText (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"17\",\"x2\":\"8\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 9 9 9 8 9\"},\"child\":[]}]})(props);\n};\nexport function FiFile (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 2 13 9 20 9\"},\"child\":[]}]})(props);\n};\nexport function FiFilm (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"20\",\"rx\":\"2.18\",\"ry\":\"2.18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"2\",\"x2\":\"7\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"2\",\"x2\":\"17\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"7\",\"x2\":\"7\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"17\",\"x2\":\"7\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"17\",\"x2\":\"22\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"7\",\"x2\":\"22\",\"y2\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiFilter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"},\"child\":[]}]})(props);\n};\nexport function FiFlag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"22\",\"x2\":\"4\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFolderMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"14\",\"x2\":\"15\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiFolderPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"11\",\"x2\":\"12\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"14\",\"x2\":\"15\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiFolder (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiFramer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\"},\"child\":[]}]})(props);\n};\nexport function FiFrown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 16s-1.5-2-4-2-4 2-4 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiGift (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 12 20 22 4 22 4 12\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"},\"child\":[]}]})(props);\n};\nexport function FiGitBranch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"3\",\"x2\":\"6\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 9a9 9 0 0 1-9 9\"},\"child\":[]}]})(props);\n};\nexport function FiGitCommit (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1.05\",\"y1\":\"12\",\"x2\":\"7\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.01\",\"y1\":\"12\",\"x2\":\"22.96\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiGitMerge (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 21V9a9 9 0 0 0 9 9\"},\"child\":[]}]})(props);\n};\nexport function FiGitPullRequest (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13 6h3a2 2 0 0 1 2 2v7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"9\",\"x2\":\"6\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiGithub (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"},\"child\":[]}]})(props);\n};\nexport function FiGitlab (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\"},\"child\":[]}]})(props);\n};\nexport function FiGlobe (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"},\"child\":[]}]})(props);\n};\nexport function FiGrid (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"3\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"14\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"14\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiHardDrive (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"12\",\"x2\":\"2\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"16\",\"x2\":\"6.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"16\",\"x2\":\"10.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiHash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"9\",\"x2\":\"20\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"15\",\"x2\":\"20\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"3\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"3\",\"x2\":\"14\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiHeadphones (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 18v-6a9 9 0 0 1 18 0v6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"},\"child\":[]}]})(props);\n};\nexport function FiHeart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"},\"child\":[]}]})(props);\n};\nexport function FiHelpCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12.01\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiHexagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]}]})(props);\n};\nexport function FiHome (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 22 9 12 15 12 15 22\"},\"child\":[]}]})(props);\n};\nexport function FiImage (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"8.5\",\"r\":\"1.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 15 16 10 5 21\"},\"child\":[]}]})(props);\n};\nexport function FiInbox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 12 16 12 14 15 10 15 8 12 2 12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"},\"child\":[]}]})(props);\n};\nexport function FiInfo (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12.01\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiInstagram (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"20\",\"rx\":\"5\",\"ry\":\"5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.5\",\"y1\":\"6.5\",\"x2\":\"17.51\",\"y2\":\"6.5\"},\"child\":[]}]})(props);\n};\nexport function FiItalic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"4\",\"x2\":\"10\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"20\",\"x2\":\"5\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"4\",\"x2\":\"9\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiKey (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"},\"child\":[]}]})(props);\n};\nexport function FiLayers (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 2 7 12 12 22 7 12 2\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 17 12 22 22 17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 12 12 17 22 12\"},\"child\":[]}]})(props);\n};\nexport function FiLayout (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"9\",\"x2\":\"21\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"21\",\"x2\":\"9\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiLifeBuoy (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"9.17\",\"y2\":\"9.17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"14.83\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"9.17\",\"x2\":\"19.07\",\"y2\":\"4.93\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"9.17\",\"x2\":\"18.36\",\"y2\":\"5.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"19.07\",\"x2\":\"9.17\",\"y2\":\"14.83\"},\"child\":[]}]})(props);\n};\nexport function FiLink2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiLink (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"},\"child\":[]}]})(props);\n};\nexport function FiLinkedin (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"9\",\"width\":\"4\",\"height\":\"12\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"4\",\"cy\":\"4\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiList (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"21\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"18\",\"x2\":\"21\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"3.01\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"12\",\"x2\":\"3.01\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"18\",\"x2\":\"3.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiLoader (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"7.76\",\"y2\":\"7.76\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.24\",\"y1\":\"16.24\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"6\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"19.07\",\"x2\":\"7.76\",\"y2\":\"16.24\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.24\",\"y1\":\"7.76\",\"x2\":\"19.07\",\"y2\":\"4.93\"},\"child\":[]}]})(props);\n};\nexport function FiLock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"11\",\"width\":\"18\",\"height\":\"11\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7 11V7a5 5 0 0 1 10 0v4\"},\"child\":[]}]})(props);\n};\nexport function FiLogIn (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 17 15 12 10 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"12\",\"x2\":\"3\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiLogOut (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 17 21 12 16 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"12\",\"x2\":\"9\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMail (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22,6 12,13 2,6\"},\"child\":[]}]})(props);\n};\nexport function FiMapPin (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"10\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiMap (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"2\",\"x2\":\"8\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"6\",\"x2\":\"16\",\"y2\":\"22\"},\"child\":[]}]})(props);\n};\nexport function FiMaximize2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 3 21 3 21 9\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 21 3 21 3 15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"3\",\"x2\":\"14\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"21\",\"x2\":\"10\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiMaximize (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"},\"child\":[]}]})(props);\n};\nexport function FiMeh (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"15\",\"x2\":\"16\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiMenu (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"12\",\"x2\":\"21\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"18\",\"x2\":\"21\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiMessageCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"},\"child\":[]}]})(props);\n};\nexport function FiMessageSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiMicOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"23\",\"x2\":\"16\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiMic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 10v2a7 7 0 0 1-14 0v-2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"23\",\"x2\":\"16\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiMinimize2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 14 10 14 10 20\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 10 14 10 14 4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"10\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"21\",\"x2\":\"10\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiMinimize (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"},\"child\":[]}]})(props);\n};\nexport function FiMinusCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMinusSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMonitor (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"3\",\"width\":\"20\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"21\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiMoon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"},\"child\":[]}]})(props);\n};\nexport function FiMoreHorizontal (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiMoreVertical (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"19\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiMousePointer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13 13l6 6\"},\"child\":[]}]})(props);\n};\nexport function FiMove (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"5 9 2 12 5 15\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 5 12 2 15 5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 19 12 22 9 19\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 9 22 12 19 15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"22\"},\"child\":[]}]})(props);\n};\nexport function FiMusic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 18V5l12-2v13\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"16\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiNavigation2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 19 21 12 17 5 21 12 2\"},\"child\":[]}]})(props);\n};\nexport function FiNavigation (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"3 11 22 2 13 21 11 13 3 11\"},\"child\":[]}]})(props);\n};\nexport function FiOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]}]})(props);\n};\nexport function FiPackage (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"16.5\",\"y1\":\"9.4\",\"x2\":\"7.5\",\"y2\":\"4.21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPaperclip (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"},\"child\":[]}]})(props);\n};\nexport function FiPauseCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"15\",\"x2\":\"10\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"15\",\"x2\":\"14\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiPause (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"6\",\"y\":\"4\",\"width\":\"4\",\"height\":\"16\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"4\",\"width\":\"4\",\"height\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiPenTool (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 19l7-7 3 3-7 7-3-3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2 2l7.586 7.586\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiPercent (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"5\",\"x2\":\"5\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6.5\",\"cy\":\"6.5\",\"r\":\"2.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"17.5\",\"cy\":\"17.5\",\"r\":\"2.5\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneCall (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneForwarded (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 1 23 5 19 9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"5\",\"x2\":\"23\",\"y2\":\"5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneIncoming (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 2 16 8 22 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"16\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneMissed (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"17\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"1\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneOutgoing (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 7 23 1 17 1\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"8\",\"x2\":\"23\",\"y2\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhone (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPieChart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.21 15.89A10 10 0 1 1 8 2.83\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 12A10 10 0 0 0 12 2v10z\"},\"child\":[]}]})(props);\n};\nexport function FiPlayCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"10 8 16 12 10 16 10 8\"},\"child\":[]}]})(props);\n};\nexport function FiPlay (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"5 3 19 12 5 21 5 3\"},\"child\":[]}]})(props);\n};\nexport function FiPlusCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPlusSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"5\",\"x2\":\"12\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPocket (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 10 12 14 16 10\"},\"child\":[]}]})(props);\n};\nexport function FiPower (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.36 6.64a9 9 0 1 1-12.73 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPrinter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 9 6 2 18 2 18 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"6\",\"y\":\"14\",\"width\":\"12\",\"height\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiRadio (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"},\"child\":[]}]})(props);\n};\nexport function FiRefreshCcw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 4 1 10 7 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 20 23 14 17 14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"},\"child\":[]}]})(props);\n};\nexport function FiRefreshCw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 4 23 10 17 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 20 1 14 7 14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"},\"child\":[]}]})(props);\n};\nexport function FiRepeat (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 1 21 5 17 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3 11V9a4 4 0 0 1 4-4h14\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 23 3 19 7 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 13v2a4 4 0 0 1-4 4H3\"},\"child\":[]}]})(props);\n};\nexport function FiRewind (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 19 2 12 11 5 11 19\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 19 13 12 22 5 22 19\"},\"child\":[]}]})(props);\n};\nexport function FiRotateCcw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 4 1 10 7 10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"},\"child\":[]}]})(props);\n};\nexport function FiRotateCw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 4 23 10 17 10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"},\"child\":[]}]})(props);\n};\nexport function FiRss (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 11a9 9 0 0 1 9 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4a16 16 0 0 1 16 16\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5\",\"cy\":\"19\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiSave (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 21 17 13 7 13 7 21\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 3 7 8 15 8\"},\"child\":[]}]})(props);\n};\nexport function FiScissors (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"4\",\"x2\":\"8.12\",\"y2\":\"15.88\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.47\",\"y1\":\"14.48\",\"x2\":\"20\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8.12\",\"y1\":\"8.12\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiSearch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]}]})(props);\n};\nexport function FiSend (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"2\",\"x2\":\"11\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 2 15 22 11 13 2 9 22 2\"},\"child\":[]}]})(props);\n};\nexport function FiServer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"8\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"14\",\"width\":\"20\",\"height\":\"8\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"6\",\"x2\":\"6.01\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"18\",\"x2\":\"6.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiSettings (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"},\"child\":[]}]})(props);\n};\nexport function FiShare2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"5\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"19\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8.59\",\"y1\":\"13.51\",\"x2\":\"15.42\",\"y2\":\"17.49\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15.41\",\"y1\":\"6.51\",\"x2\":\"8.59\",\"y2\":\"10.49\"},\"child\":[]}]})(props);\n};\nexport function FiShare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 6 12 2 8 6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiShieldOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiShield (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"},\"child\":[]}]})(props);\n};\nexport function FiShoppingBag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 10a4 4 0 0 1-8 0\"},\"child\":[]}]})(props);\n};\nexport function FiShoppingCart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"21\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"20\",\"cy\":\"21\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"},\"child\":[]}]})(props);\n};\nexport function FiShuffle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 3 21 3 21 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"20\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 16 21 21 16 21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"15\",\"x2\":\"21\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"4\",\"x2\":\"9\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiSidebar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"3\",\"x2\":\"9\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiSkipBack (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"19 20 9 12 19 4 19 20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"19\",\"x2\":\"5\",\"y2\":\"5\"},\"child\":[]}]})(props);\n};\nexport function FiSkipForward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"5 4 15 12 5 20 5 4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"5\",\"x2\":\"19\",\"y2\":\"19\"},\"child\":[]}]})(props);\n};\nexport function FiSlack (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\"},\"child\":[]}]})(props);\n};\nexport function FiSlash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]}]})(props);\n};\nexport function FiSliders (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"21\",\"x2\":\"4\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"10\",\"x2\":\"4\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"21\",\"x2\":\"20\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"12\",\"x2\":\"20\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"14\",\"x2\":\"7\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"8\",\"x2\":\"15\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"16\",\"x2\":\"23\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiSmartphone (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"5\",\"y\":\"2\",\"width\":\"14\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiSmile (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8 14s1.5 2 4 2 4-2 4-2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiSpeaker (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"2\",\"width\":\"16\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"14\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"6\",\"x2\":\"12.01\",\"y2\":\"6\"},\"child\":[]}]})(props);\n};\nexport function FiSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiStar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"},\"child\":[]}]})(props);\n};\nexport function FiStopCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\"},\"child\":[]}]})(props);\n};\nexport function FiSun (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"1\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"4.22\",\"x2\":\"5.64\",\"y2\":\"5.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"18.36\",\"x2\":\"19.78\",\"y2\":\"19.78\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"12\",\"x2\":\"3\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"12\",\"x2\":\"23\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"19.78\",\"x2\":\"5.64\",\"y2\":\"18.36\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"5.64\",\"x2\":\"19.78\",\"y2\":\"4.22\"},\"child\":[]}]})(props);\n};\nexport function FiSunrise (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 18a5 5 0 0 0-10 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"10.22\",\"x2\":\"5.64\",\"y2\":\"11.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"23\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"11.64\",\"x2\":\"19.78\",\"y2\":\"10.22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"22\",\"x2\":\"1\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 6 12 2 16 6\"},\"child\":[]}]})(props);\n};\nexport function FiSunset (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 18a5 5 0 0 0-10 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"10.22\",\"x2\":\"5.64\",\"y2\":\"11.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"23\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"11.64\",\"x2\":\"19.78\",\"y2\":\"10.22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"22\",\"x2\":\"1\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 5 12 9 8 5\"},\"child\":[]}]})(props);\n};\nexport function FiTable (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\"},\"child\":[]}]})(props);\n};\nexport function FiTablet (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"2\",\"width\":\"16\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiTag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"7\",\"x2\":\"7.01\",\"y2\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiTarget (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"6\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiTerminal (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 17 10 11 4 5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"20\",\"y2\":\"19\"},\"child\":[]}]})(props);\n};\nexport function FiThermometer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"},\"child\":[]}]})(props);\n};\nexport function FiThumbsDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"},\"child\":[]}]})(props);\n};\nexport function FiThumbsUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"},\"child\":[]}]})(props);\n};\nexport function FiToggleLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"22\",\"height\":\"14\",\"rx\":\"7\",\"ry\":\"7\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiToggleRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"22\",\"height\":\"14\",\"rx\":\"7\",\"ry\":\"7\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"16\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiTool (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"},\"child\":[]}]})(props);\n};\nexport function FiTrash2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"3 6 5 6 21 6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"11\",\"x2\":\"10\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiTrash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"3 6 5 6 21 6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"},\"child\":[]}]})(props);\n};\nexport function FiTrello (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"7\",\"y\":\"7\",\"width\":\"3\",\"height\":\"9\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"7\",\"width\":\"3\",\"height\":\"5\"},\"child\":[]}]})(props);\n};\nexport function FiTrendingDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 18 13.5 8.5 8.5 13.5 1 6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 18 23 18 23 12\"},\"child\":[]}]})(props);\n};\nexport function FiTrendingUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 6 13.5 15.5 8.5 10.5 1 18\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 6 23 6 23 12\"},\"child\":[]}]})(props);\n};\nexport function FiTriangle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"},\"child\":[]}]})(props);\n};\nexport function FiTruck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"3\",\"width\":\"15\",\"height\":\"13\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"16 8 20 8 23 11 23 16 16 16 16 8\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.5\",\"cy\":\"18.5\",\"r\":\"2.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.5\",\"cy\":\"18.5\",\"r\":\"2.5\"},\"child\":[]}]})(props);\n};\nexport function FiTv (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"15\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 2 12 7 7 2\"},\"child\":[]}]})(props);\n};\nexport function FiTwitch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 2H3v16h5v4l4-4h5l4-4V2zM11 11V7M16 11V7\"},\"child\":[]}]})(props);\n};\nexport function FiTwitter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"},\"child\":[]}]})(props);\n};\nexport function FiType (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 7 4 4 20 4 20 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"20\",\"x2\":\"15\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"4\",\"x2\":\"12\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiUmbrella (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\"},\"child\":[]}]})(props);\n};\nexport function FiUnderline (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"21\",\"x2\":\"20\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiUnlock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"11\",\"width\":\"18\",\"height\":\"11\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7 11V7a5 5 0 0 1 9.9-1\"},\"child\":[]}]})(props);\n};\nexport function FiUploadCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 16 12 12 8 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"12\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 16 12 12 8 16\"},\"child\":[]}]})(props);\n};\nexport function FiUpload (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 8 12 3 7 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"3\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiUserCheck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 11 19 13 23 9\"},\"child\":[]}]})(props);\n};\nexport function FiUserMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"11\",\"x2\":\"17\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiUserPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"8\",\"x2\":\"20\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"11\",\"x2\":\"17\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiUserX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"8\",\"x2\":\"23\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"8\",\"x2\":\"18\",\"y2\":\"13\"},\"child\":[]}]})(props);\n};\nexport function FiUser (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiUsers (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M23 21v-2a4 4 0 0 0-3-3.87\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 3.13a4 4 0 0 1 0 7.75\"},\"child\":[]}]})(props);\n};\nexport function FiVideoOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiVideo (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"23 7 16 12 23 17 23 7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"15\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiVoicemail (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.5\",\"cy\":\"11.5\",\"r\":\"4.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.5\",\"cy\":\"11.5\",\"r\":\"4.5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5.5\",\"y1\":\"16\",\"x2\":\"18.5\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiVolume1 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.54 8.46a5 5 0 0 1 0 7.07\"},\"child\":[]}]})(props);\n};\nexport function FiVolume2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"},\"child\":[]}]})(props);\n};\nexport function FiVolumeX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"9\",\"x2\":\"17\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"9\",\"x2\":\"23\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiVolume (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]}]})(props);\n};\nexport function FiWatch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 9 12 12 13.5 13.5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"},\"child\":[]}]})(props);\n};\nexport function FiWifiOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.71 5.05A16 16 0 0 1 22.58 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.53 16.11a6 6 0 0 1 6.95 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiWifi (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.55a11 11 0 0 1 14.08 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1.42 9a16 16 0 0 1 21.16 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.53 16.11a6 6 0 0 1 6.95 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiWind (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"},\"child\":[]}]})(props);\n};\nexport function FiXCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiXOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiXSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"6\",\"x2\":\"6\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"6\",\"x2\":\"18\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiYoutube (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"},\"child\":[]}]})(props);\n};\nexport function FiZapOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"12.41 6.75 13 2 10.57 4.92\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"18.57 12.91 21 10 15.66 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 8 3 14 12 14 11 22 16 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiZap (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"},\"child\":[]}]})(props);\n};\nexport function FiZoomIn (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"11\",\"y1\":\"8\",\"x2\":\"11\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiZoomOut (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\n","import React, { useState } from 'react';\n\nconst CustomSelect = ({ options, onChange, selectedValue }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const handleSelect = (value) => {\n onChange(value);\n setIsOpen(false);\n };\n\n\n return (\n
\n setIsOpen(!isOpen)}\n >\n {options.find(option => option.iso_code === selectedValue.iso_code).ico}\n {options.find(option => option.iso_code === selectedValue.iso_code).name}\n \n \n {isOpen && (\n
    \n {options.map((option, index) => (\n handleSelect(option)}\n >\n {option.ico}\n {option.name}\n \n ))}\n
\n )}\n
\n );\n };\n\nexport default CustomSelect;\n","const checkBox = ({ value, text, handleChange }) => {\n if (!text) return null;\n return (\n
\n \n \n
\n );\n};\n\nexport default checkBox;\n","import React, { useState } from \"react\";\n\nimport { FiEyeOff, FiEye } from \"react-icons/fi\";\nimport CustomSelect from \"./select\";\nimport { COUNTRIES } from \"./constants\";\nimport CheckBox from \"./checkBox\";\n\nconst Sidebar = ({\n handleChangeSelect,\n selectedCountry,\n layersCheckbox,\n setCheckboxLayer,\n}) => {\n const [isSidebarVisible, setIsSidebarVisible] = useState(true);\n\n if (!isSidebarVisible) {\n return (\n setIsSidebarVisible(true)}\n >\n
\n \n \n
\n \n );\n }\n\n return (\n
\n

\n Countries\n \n

\n \n

Layers

\n
\n {layersCheckbox && Object.keys(layersCheckbox).length\n ? Object.keys(layersCheckbox).map((layer) => (\n \n ))\n : null}\n
\n
\n );\n};\nexport default Sidebar;\n","import { Popup } from \"react-map-gl\";\nimport { AMENITIES } from \"./constants\";\nconst basename = (process.env.PUBLIC_URL || \"\").replace(\"//\", \"/\");\n\nconst popUp = ({ hoverInfo }) => {\n if (!hoverInfo) return null;\n if (!hoverInfo.lngLat) return null;\n\n const { properties, layer, lngLat } = hoverInfo;\n const amenityIco = AMENITIES[properties.amenity];\n\n return (\n \n
\n {amenityIco && (\n \n )}\n

\n Amenity: \n {properties.amenity} \n

\n

\n Name:\n {properties.name} \n

\n

\n OSM ID:\n {properties.id}\n

\n

\n Layer:\n {layer.id.split(\"-\")[0]}\n

\n
\n \n );\n};\n\nexport default popUp;\n","import {\n MAX_ZOOM_LAYOUT_DATA,\n MIN_ZOOM_LAYOUT_DATA,\n MAX_ZOOM_HEADMAP,\n MIN_ZOOM_HEADMAP,\n} from \"../components/constants\";\n// generic\nexport const layoutStyleGeneral = {\n \"icon-image\": [\"concat\", [\"get\", \"amenity\"], \"-icon\"],\n \"icon-size\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n MIN_ZOOM_LAYOUT_DATA,\n 0.11,\n MAX_ZOOM_LAYOUT_DATA,\n 0.4,\n ],\n};\n\nexport const paintHeatmap = (layer_id) => {\n let heatmapColor;\n\n switch (layer_id) {\n case \"education\":\n heatmapColor = [\n \"interpolate\",\n [\"linear\"],\n [\"heatmap-density\"],\n 0,\n \"rgba(255, 255, 255, 0)\",\n 0.1,\n \"rgba(255, 255, 255, 0.1)\",\n 0.3,\n \"rgba(255, 255, 255, 0.3)\",\n 0.5,\n \"rgba(255, 255, 255, 0.5)\",\n 0.7,\n \"rgba(255, 255, 255, 0.7)\",\n 1,\n \"rgba(255, 255, 255, 1)\",\n ];\n break;\n case \"healthcare\":\n heatmapColor = [\n \"interpolate\",\n [\"linear\"],\n [\"heatmap-density\"],\n 0,\n \"rgba(199, 5, 5, 0)\",\n 0.1,\n \"#c70505\",\n 0.3,\n \"#ff6b6b\",\n 0.5,\n \"#ff8c8c\",\n 0.7,\n \"#ffafaf\",\n 1,\n \"#ffd1d1\",\n ];\n break;\n case \"transport\":\n heatmapColor = [\n \"interpolate\",\n [\"linear\"],\n [\"heatmap-density\"],\n 0,\n \"rgba(0, 0, 255, 0)\",\n 0.1,\n \"#0000ff\",\n 0.3,\n \"#6b6bff\",\n 0.5,\n \"#8c8cff\",\n 0.7,\n \"#afafff\",\n 1,\n \"#d1d1ff\",\n ];\n break;\n default:\n heatmapColor = [\n \"interpolate\",\n [\"linear\"],\n [\"heatmap-density\"],\n 0,\n \"rgba(255, 255, 255, 0)\",\n 1,\n \"rgba(255, 255, 255, 1)\",\n ];\n }\n\n return {\n \"heatmap-weight\": [\n \"interpolate\",\n [\"linear\"],\n [\"get\", \"signal_index\"],\n 0,\n 0,\n MAX_ZOOM_HEADMAP,\n 1,\n ],\n \"heatmap-intensity\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 4,\n 0,\n MAX_ZOOM_HEADMAP,\n 1,\n ],\n \"heatmap-color\": heatmapColor,\n \"heatmap-radius\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 4,\n 2,\n MAX_ZOOM_HEADMAP,\n 20,\n ],\n \"heatmap-opacity\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 4,\n 1,\n MAX_ZOOM_HEADMAP,\n 0,\n ],\n };\n};\n","import React from \"react\";\nimport { Source, Layer } from \"react-map-gl\";\nimport { layoutStyleGeneral, paintHeatmap } from \"../utils/mapStyle\";\n\nimport {\n MIN_ZOOM_HEADMAP,\n MAX_ZOOM_HEADMAP,\n MAX_ZOOM_LAYOUT_DATA,\n MIN_ZOOM_LAYOUT_DATA,\n} from \"../components/constants\";\n\nconst TITLER_URL=process.env.REACT_APP_TITLER_URL || \"\"\nconst S3_PATH=process.env.REACT_APP_S3_PATH || \"\"\n\nconst DataLayer = ({ id, data, layerFlag, layout, maxzoom, minzoom }) => (\n \n \n \n \n);\n\nconst DataLayerWrap = ({ sourcesDataFlag, sourcesData, countryData }) => (\n <>\n {sourcesDataFlag && sourcesData && sourcesData.educationData && (\n \n )}\n {sourcesDataFlag && sourcesData && sourcesData.healthcareData && (\n \n )}\n {sourcesDataFlag && sourcesData && sourcesData.transportData && (\n \n )}\n {sourcesDataFlag && (\n \n \n \n )}\n \n);\n\nexport default DataLayerWrap;\n","import React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport StaticMap, {\n Source,\n Layer,\n NavigationControl,\n ScaleControl,\n} from \"react-map-gl\";\nimport {\n COUNTRIES,\n MIN_ZOOM_LAYOUT,\n MIN_ZOOM_HEADMAP,\n MAX_ZOOM_HEADMAP,\n MAX_ZOOM_LAYOUT_DATA,\n MIN_ZOOM_LAYOUT_DATA,\n AMENITIES,\n} from \"../components/constants\";\nimport DeckGL from \"deck.gl\";\nimport { MapContext } from \"react-map-gl/dist/esm/components/map.js\";\nimport { fetchLocalCsv } from \"../utils/utils\";\nimport Sidebar from \"../components/Sidebar\";\nimport CustomPopUp from \"../components/popUp\";\nimport DataLayerWrap from \"../components/dataLayer\";\n\n\nconst basename = (process.env.PUBLIC_URL || \"\").replace(\"//\", \"/\");\nconst API_TOKEN = process.env.REACT_APP_MAPBOX_ACCESS_TOKEN;\nconst LAYERS_ACTION = [\n \"education-points\",\n \"healthcare-points\",\n \"trasport-points\",\n];\nconst initialViewState = {\n latitude: 14.0583,\n longitude: 108.2772,\n zoom: 8,\n};\n\nfunction App() {\n const mapRef = useRef(null);\n const deckRef = useRef(null);\n const [deckLayers, setDeckLayers] = useState([]);\n const [viewState, setViewState] = useState({ ...initialViewState });\n const [sourcesData, setSourcesData] = useState(null);\n const [sourcesDataFlag, setSourcesDataFlag] = useState(null);\n const [selectedCountry, setSelectedCountry] = useState(COUNTRIES[0]);\n const [hoverInfo, setHoverInfo] = useState(null);\n\n // fetch data\n useEffect(() => {\n const fetchData = async ({ name_code }) => {\n try {\n const educationData = await fetchLocalCsv(name_code, \"education\");\n const healthcareData = await fetchLocalCsv(name_code, \"healthcare\");\n const transportData = await fetchLocalCsv(name_code, \"transport\");\n\n setSourcesData({\n educationData,\n healthcareData,\n transportData,\n });\n setSourcesDataFlag({\n education_layer: false,\n healthcare_layer: false,\n transport_layer: false,\n population_layer: true,\n\n });\n } catch (err) {\n setSourcesData(null);\n setSourcesDataFlag(null);\n }\n };\n\n const { name_code } = selectedCountry;\n fetchData({ name_code });\n }, [selectedCountry]);\n\n const handleChange = (selectCountry) => {\n setViewState({ ...initialViewState, ...selectCountry.center });\n setSelectedCountry(selectCountry);\n };\n\n const handlesetSourcesDataFlag = (layer_id) => (event) => {\n setSourcesDataFlag({\n ...sourcesDataFlag,\n [layer_id]: event.target.checked,\n });\n };\n const handleMapClick = (event) => {};\n const handleMapHover = (event) => {\n try {\n const features = mapRef.current.queryRenderedFeatures([event.x, event.y]);\n const new_features = features.filter(\n (i) => i.layer && LAYERS_ACTION.includes(i.layer.id)\n );\n\n if (new_features.length) {\n const i = { ...new_features[0], lngLat: event.coordinate };\n setHoverInfo({ ...i });\n } else {\n setHoverInfo(null);\n }\n } catch (error) {\n setHoverInfo(null);\n console.error(error);\n }\n };\n\n const handleLoad = () => {\n const map = mapRef.current.getMap();\n // load images\n const icons = Object.keys(AMENITIES);\n icons\n .filter((j) => j)\n .forEach((i) => {\n fetch(`${basename}/assets/marker/${AMENITIES[i]}`)\n .then((response) => response.blob())\n .then((blob) => {\n try {\n const reader = new FileReader();\n reader.onload = () => {\n const image = new Image(64, 64);\n image.src = reader.result;\n image.onload = () => {\n map.addImage(`${i}-icon`, image);\n };\n };\n reader.readAsDataURL(blob);\n } catch (error) {\n console.error(error);\n }\n });\n });\n };\n return (\n
\n
\n \n \n \n \n \n \n \n \n\n \n
\n
\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\n\nimport 'mapbox-gl/dist/mapbox-gl.css';\nimport \"./assets/css/index.css\";\nimport reportWebVitals from './reportWebVitals';\n\nimport App from './pages/App';\n\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n \n \n \n);\n\nreportWebVitals();\n"],"names":["window","document","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","TYPE_FUNCTION","round","Math","abs","now","Date","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","Array","isArray","each","obj","iterator","i","forEach","length","call","hasOwnProperty","deprecate","method","name","message","deprecationMessage","e","Error","stack","replace","log","console","warn","apply","this","arguments","Object","target","TypeError","output","index","source","nextKey","extend","dest","src","merge","keys","inherit","child","base","properties","childP","baseP","prototype","create","constructor","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","type","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parent","parentNode","inStr","str","find","indexOf","trim","split","inArray","findByKey","toArray","slice","uniqueArray","key","sort","results","values","push","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","COMPUTE_INTERVAL","INPUT_START","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","self","options","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","start","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","concat","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","filter","touch","DEDUP_TIMEOUT","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","t","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","value","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_FAILED","Recognizer","defaults","id","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","item","add","stop","force","stopped","curRecognizer","existing","remove","on","events","off","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_MOVE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Swipe","Pinch","Rotate","Press","define","aa","require","ca","p","c","encodeURIComponent","da","Set","ea","fa","ha","ia","ja","ka","la","ma","d","f","g","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","z","ra","sa","ta","pa","isNaN","qa","oa","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","Symbol","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","A","Ma","match","Na","Oa","prepareStackTrace","defineProperty","Reflect","construct","l","h","k","displayName","includes","Pa","tag","render","Qa","$$typeof","_context","_payload","_init","Ra","Sa","Ta","nodeName","Va","_valueTracker","getOwnPropertyDescriptor","configurable","enumerable","getValue","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","body","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","eb","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","children","hb","ib","jb","textContent","kb","lb","mb","nb","namespaceURI","innerHTML","valueOf","toString","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","ob","lastChild","nodeType","nodeValue","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","setProperty","charAt","substring","tb","menuitem","area","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","ub","vb","is","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","m","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","flags","Wb","memoizedState","dehydrated","Xb","Zb","sibling","current","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","B","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","C","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","priority","isDehydrated","containerInfo","Xc","Yc","shift","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","String","fromCharCode","code","location","repeat","locale","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Vd","Xd","Yd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","date","datetime","email","month","number","password","range","search","tel","text","url","week","me","ne","oe","listeners","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","contains","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","href","Ne","contentEditable","Oe","focusedElem","selectionRange","documentElement","selectionStart","selectionEnd","min","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","focus","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","animation","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","Ub","instance","listener","D","of","has","pf","qf","rf","random","sf","bind","capture","passive","n","J","u","w","F","tf","uf","vf","wf","na","xa","$a","ba","je","char","ke","unshift","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","Hf","Promise","Jf","queueMicrotask","resolve","then","catch","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","E","G","Vf","H","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","elementType","deletions","Cg","pendingProps","overflow","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","ref","_owner","_stringRef","refs","Mg","Ng","Og","Pg","Qg","Rg","implementation","Sg","Tg","q","r","next","done","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","_currentValue","bh","childLanes","ch","dependencies","firstContext","lanes","dh","eh","memoizedValue","fh","gh","hh","interleaved","ih","jh","kh","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","lh","mh","eventTime","lane","payload","nh","K","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","tagName","zh","Ah","Bh","L","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","ReactCurrentDispatcher","Gh","Hh","M","N","O","Ih","Jh","Kh","Lh","P","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","queue","Uh","Vh","Wh","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","Xh","Yh","Zh","$h","ai","getSnapshot","bi","ci","Q","di","lastEffect","stores","ei","fi","gi","hi","ii","deps","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","R","Bi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ci","defaultProps","Di","Ei","isMounted","_reactInternals","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","Fi","shouldComponentUpdate","isPureReactComponent","Gi","contextType","updater","Hi","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ii","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Ji","digest","Ki","Li","error","Mi","WeakMap","Ni","Oi","Pi","Qi","getDerivedStateFromError","componentDidCatch","Ri","componentStack","Si","pingCache","Ti","Ui","Vi","Wi","ReactCurrentOwner","Xi","Yi","Zi","$i","aj","compare","bj","cj","dj","baseLanes","cachePool","transitions","ej","fj","gj","hj","ij","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","jj","kj","pendingContext","lj","zj","Aj","Bj","Cj","mj","nj","oj","fallback","pj","qj","sj","dataset","dgst","tj","uj","_reactRetry","rj","subtreeFlags","vj","wj","isBackwards","rendering","renderingStartTime","tail","tailMode","xj","Dj","S","Ej","Fj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","size","createElementNS","autoFocus","createTextNode","T","Gj","Hj","Ij","Jj","U","Kj","WeakSet","V","Lj","W","Mj","Nj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","insertBefore","_reactRootContainer","Wj","X","Xj","Yj","Zj","onCommitFiberUnmount","componentWillUnmount","ak","bk","ck","dk","ek","isHidden","fk","gk","display","hk","ik","jk","kk","__reactInternalSnapshotBeforeUpdate","Vk","lk","ceil","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","Infinity","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","finishedWork","finishedLanes","Pk","timeoutHandle","Qk","Rk","Sk","Tk","Uk","mutableReadLanes","Bc","Oj","onCommitFiberRoot","mc","onRecoverableError","Wk","onPostCommitFiberRoot","Xk","Yk","$k","isReactComponent","pendingChildren","al","mutableSourceEagerHydrationData","bl","cache","pendingSuspenseBoundaries","dl","el","fl","gl","hl","il","yj","Zk","kl","reportError","ll","_internalRoot","ml","nl","ol","pl","rl","ql","unmount","unstable_scheduleHydration","querySelectorAll","JSON","stringify","form","sl","usingClientEntryPoint","Events","tl","findFiberByHostInstance","bundleType","version","rendererPackageName","ul","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","isDisabled","supportsFiber","inject","exports","createPortal","cl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","err","module","__self","__source","Fragment","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","map","only","Component","Profiler","PureComponent","StrictMode","Suspense","act","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","pop","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","floor","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","leafPrototypes","getProto","getPrototypeOf","__proto__","__esModule","ns","def","getOwnPropertyNames","definition","o","chunkId","reduce","promises","miniCssF","globalThis","Function","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","nc","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","installedChunks","j","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","onPerfEntry","_ref","getCLS","getFID","getFCP","getLCP","getTTFB","MountedMapsContext","React","deepEqual","aKeys","bKeys","syncProjection","getProjection","srcProjection","setProjection","transformToViewState","tr","longitude","lng","latitude","lat","pitch","bearing","padding","applyViewStateToTransform","viewState","isPaddingEqual","refProps","normalizeStyle","toJS","layers","layerIndex","layer","normalizedLayer","interactive","layerRef","propName","DEFAULT_STYLE","sources","mouseover","click","dblclick","mouseenter","mouseleave","mouseout","contextmenu","cameraEvents","movestart","move","moveend","dragstart","drag","dragend","zoomstart","zoomend","rotatestart","rotate","rotateend","pitchstart","pitchend","otherEvents","wheel","boxzoomstart","boxzoomend","boxzoomcancel","resize","load","idle","styledata","sourcedata","settingNames","handlerNames","Mapbox","MapClass","container","_map","_internalUpdate","_inRender","_hoveredFeatures","_deferredEvents","_onEvent","_onPointerEvent","_updateHover","interactiveLayerIds","features","_queryRenderedFeatures","point","_onCameraEvent","_MapClass","_initialize","transform","_renderTransform","setProps","oldProps","settingsChanged","_updateSettings","_createShadowTransform","sizeChanged","_updateSize","viewStateChanged","_updateViewState","_updateStyle","_updateStyleComponents","_updateHandlers","isMoving","redraw","reuse","that","savedMaps","oldContainer","getContainer","className","childNodes","_container","resizeObserver","_resizeObserver","disconnect","observe","styleDiffing","initialViewState","bounds","fitBounds","fitBoundsOptions","duration","isStyleLoaded","fire","once","_update","mapStyle","mapOptions","accessToken","mapboxAccessToken","getAccessTokenFromEnv","getContext","HTMLCanvasElement","setPadding","cursor","getCanvas","renderMap","_render","runRenderTaskQueue","_renderTaskQueue","run","_onBeforeRepaint","_onAfterRepaint","fireEvent","_fireEvent","eventName","recycle","querySelector","_frame","cancel","renderTransform","newTransform","clone","pixelsToGLUnits","cloneTransform","painter","nextProps","triggerEvents","cameraElevationReference","deferredEvents","currProps","setter","diff","localIdeographFontFamily","setStyle","setLight","light","setFog","fog","setTerrain","terrain","getSource","newValue","_a","_b","disable","queryRenderedFeatures","getLayer","onMouseMove","onMouseEnter","onMouseLeave","wasHovering","isHovering","baseFire","exec","MapboxAccessToken","skipMethods","mapInstance","result","getMap","getZoom","getBearing","getPitch","getPadding","getBounds","project","lnglat","unproject","queryTerrainElevation","geometry","proto","from","getMethodNames","globalSettings","MapContext","defaultLib","mountedMapsContext","setMapInstance","containerRef","contextValue","mapLib","mapbox","mapboxgl","RTLTextPlugin","getRTLTextPluginStatus","setRTLTextPlugin","setGlobals","supported","reuseMaps","onMapMount","originalEvent","onMapUnmount","useIsomorphicLayoutEffect","position","unitlessNumber","applyReactStyle","styles","Number","isFinite","thisRef","marker","hasChildren","Marker","setLngLat","getElement","evt","lngLat","getLngLat","onDragStart","onDrag","onDragEnd","addTo","draggable","popup","rotationAlignment","pitchAlignment","ax","ay","bx","by","arePointsEqual","getOffset","setOffset","isDraggable","setDraggable","setRotation","getRotationAlignment","setRotationAlignment","getPitchAlignment","setPitchAlignment","getPopup","setPopup","getClassList","pp","Popup","onOpen","onClose","setDOMContent","isOpen","anchor","maxWidth","setMaxWidth","prevClassList","nextClassList","removeClassName","addClassName","onCreate","arg1","arg2","arg3","ctrl","opts","onAdd","onRemove","hasControl","addControl","removeControl","useControl","AttributionControl","FullscreenControl","containerId","getElementById","_controlContainer","GeolocateControl","setupUI","_setupUI","hasChildNodes","onGeolocate","onOutOfMaxBounds","onTrackUserLocationStart","onTrackUserLocationEnd","NavigationControl","ScaleControl","propsRef","prevProps","unit","setUnit","assert","condition","layerCounter","setStyleLoaded","_loaded","removeLayer","layout","paint","minzoom","maxzoom","beforeId","moveLayer","prevLayout","setLayoutProperty","prevPaint","setPaintProperty","setFilter","setLayerZoomRange","updateLayer","addLayer","createLayer","sourceCounter","allLayers","getStyle","removeSource","changedKey","changedKeyCount","setData","updateImage","coordinates","setCoordinates","setUrl","setTiles","tiles","updateSource","addSource","createSource","_Map","_Popup","_NavigationControl","_ScaleControl","Layer","_Layer","Source","_Source","IconoSVG","_jsx","xmlns","_jsxs","fill","cy","cx","points","viewBox","stroke","COUNTRIES","ico","SvgVietnam","name_code","iso_code","rescale","Svglao","SvgMyanmar","SvgNepal","SvgAfghanistan","SvgPakistan","MAX_ZOOM_HEADMAP","MIN_ZOOM_LAYOUT_DATA","AMENITIES","hospital","clinic","dentist","pharmacy","doctors","nursing_home","parking","fuel","bus_station","bicycle_parking","ferry_terminal","taxi","charging_station","car_rental","school","university","library","kindergarten","college","public_bookcase","parking_entrance","bicycle_rental","language_school","channelHandles","animationHandles","Timeline","channels","animations","playing","lastEngineTime","addChannel","POSITIVE_INFINITY","rate","channelId","channel","_setChannelTime","removeChannel","animationHandle","detachAnimation","isFinished","getTime","setTime","max","animationData","play","pause","attachAnimation","channelHandle","engineTime","offsetTime","DEFAULT_PROP_VALIDATORS","validate","propType","array","ArrayBuffer","isView","makePropValidator","getTypeOf","MODULE_INJECTORS","vertex","fragment","REGEX_START_OF_MAIN","REGEX_END_OF_MAIN","fragments","DECLARATION_INJECT_MARKER","getHookStage","hook","injectShader","stage","injectStandardStubs","isVertex","fragmentData","len","injection","fragmentString","ShaderModuleInstance","vs","fs","getModuleUniforms","deprecations","defines","injections","uniforms","uniformTypes","instantiateModules","modules","moduleObject","uniformPropTypes","getUniforms","_parseDeprecationDefinitions","normalizeInjections","propTypes","propValidators","entries","makePropValidators","getModuleSource","moduleSource","moduleName","userProps","errorMessage","validated","propsValidator","private","getValidatedProperties","getDefines","checkDeprecations","shaderSource","regex","deprecated","old","new","removed","RegExp","_defaultGetUniforms","propDef","selectShaders","platformInfo","getShaderSource","shader","wgsl","glsl","resolveModules","getShaderDependencies","moduleMap","moduleDepth","getDependencyGraph","level","ES300_REPLACEMENTS","ES300_VERTEX_REPLACEMENTS","makeVariableTextRegExp","ES300_FRAGMENT_REPLACEMENTS","convertShader","replacements","pattern","replacement","qualifier","getShaderHooks","hookFunctions","hookInjections","hookName","hookFunction","signature","header","footer","normalizeShaderHooks","shaderStage","normalizedHook","getShaderName","defaultName","getShaderVersion","words","parsedVersion","parseInt","INJECT_SHADER_DECLARATIONS","FRAGMENT_SHADER_PROLOGUE","assembleWGSLShader","coreSource","assembledSource","hookFunctionMap","declInjections","mainInjections","hash","modulesToInject","injectionType","assembleGLSLShader","language","prologue","sourceVersion","getShaderInfo","targetVersion","shaderLanguageVersion","sourceVersionDirective","allDefines","injectShaderName","getShaderNameDefine","gpu","getPlatformShaderDefines","sourceText","getApplicationDefines","transpileGLSLShader","assembleGetUniforms","moduleUniforms","ShaderAssembler","static","_hookFunctions","_defaultModules","getDefaultShaderAssembler","defaultShaderAssembler","addDefaultModule","removeDefaultModule","addShaderHook","assembleShader","_getModuleList","assembled","assembleShaderWGSL","assembleShaderPair","shaderLanguage","assembleShaderPairWGSL","assembleShaderPairGLSL","appModules","seen","fp32","isElectron","mockUserAgent","Boolean","versions","realUserAgent","isBrowser","browser","LocalStorage","defaultConfig","storage","setItem","removeItem","getStorage","config","_loadConfiguration","getConfiguration","setConfiguration","configuration","serialized","serializedConfiguration","getItem","parse","COLOR","BACKGROUND_INCREMENT","getColor","WHITE","window_","process_","navigator_","getHiResTimestamp","timestamp","timeParts","hrtime","originalConsole","debug","info","DEFAULT_LOG_CONFIGURATION","enabled","noop","ONCE","Log","_startTs","_deltaTs","userData","LOG_THROTTLE_TIMEOUT","_storage","predefined","propNames","object","autobind","seal","newLevel","setLevel","getLevel","isEnabled","getTotal","toPrecision","getDelta","newPriority","getPriority","setting","settings","table","_getLogFunction","oldUsage","newUsage","probe","logLevel","getTableHeader","timeEnd","group","collapsed","normalizeArguments","groupCollapsed","groupEnd","withGroup","func","trace","_shouldLog","normalizeLogLevel","total","delta","string","padLength","leftPad","ms","formatted","toFixed","formatTime","background","addColor","decorateMessage","resolvedLevel","messageType","title","COORDINATE_SYSTEM","DEFAULT","LNGLAT","METER_OFFSETS","LNGLAT_OFFSETS","CARTESIAN","PROJECTION_MODE","WEB_MERCATOR","GLOBE","WEB_MERCATOR_AUTO_OFFSET","IDENTITY","UNIT","common","meters","pixels","EVENTS","panstart","panmove","panend","EPSILON","ARRAY_TYPE","Float32Array","transformMat4","out","vec","glMatrix","invert","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","multiply","b0","b1","b2","b3","translate","rotateX","rad","sin","cos","rotateZ","perspective","fovy","aspect","near","far","tan","ortho","right","bottom","lr","bt","isEqual","memoize","cachedResult","cachedArgs","ZERO_VECTOR","VECTOR_TO_POINT_MATRIX","IDENTITY_MATRIX","DEFAULT_PIXELS_PER_UNIT2","DEFAULT_COORDINATE_ORIGIN","getMemoizedViewportUniforms","_ref2","viewport","devicePixelRatio","coordinateSystem","coordinateOrigin","projectionCenter","viewProjectionMatrix","originCommon","cameraPosCommon","shaderCoordinateOrigin","geospatialOrigin","viewMatrixUncentered","projectionMatrix","viewMatrix","cameraPosition","offsetMode","getOffsetOrigin","projectPosition","vec4","mat4","calculateMatrixAndOffset","distanceScales","getDistanceScales","viewportSize","focalDistance","project_uCoordinateSystem","project_uProjectionMode","projectionMode","project_uCoordinateOrigin","project_uCommonOrigin","project_uCenter","project_uPseudoMeters","_pseudoMeters","project_uViewportSize","project_uDevicePixelRatio","project_uFocalDistance","project_uCommonUnitsPerMeter","unitsPerMeter","project_uCommonUnitsPerWorldUnit","project_uCommonUnitsPerWorldUnit2","project_uScale","project_uWrapLongitude","project_uViewProjectionMatrix","project_uModelMatrix","project_uCameraPosition","distanceScalesAtOrigin","unitsPerMeter2","unitsPerDegree","unitsPerDegree2","isGeospatial","fround","unprojectPosition","INITIAL_MODULE_OPTIONS","projectShader","modelMatrix","autoWrapLongitude","getUniformsFromViewport","DEFAULT_MODULES","SHADER_HOOKS","getShaderAssembler","shaderAssembler","shaderModule","shaderHook","LIFECYCLE","COMPONENT_SYMBOL","PROP_TYPES_SYMBOL","DEPRECATED_PROPS_SYMBOL","ASYNC_DEFAULTS_SYMBOL","ASYNC_ORIGINAL_SYMBOL","ASYNC_RESOLVED_SYMBOL","loggers","register","deckLog","flatten","flattenArray","fillArray","copied","copyWithin","Stat","sampleSize","samples","lastTiming","lastSampleTime","lastSampleCount","_count","_time","_samples","_startTime","_timerPending","setSampleSize","incrementCount","addCount","decrementCount","subtractCount","_checkSampling","addTime","timeStart","getSampleAverageCount","getSampleAverageTime","getSampleHz","getAverageCount","getAverageTime","getHz","Stats","stats","_initializeStats","_getOrCreate","stat","getTable","average","hz","isBoolean","isFunction","isObject","isPureObject","isIterable","isAsyncIterable","asyncIterator","isResponse","Response","arrayBuffer","json","isBlob","Blob","isBuffer","isReadableStream","ReadableStream","tee","getReader","isReadableDOMStream","read","pipe","readable","isReadableNodeStream","isLoaderObject","loader","extensions","normalizeLoader","parseTextSync","parseText","binary","pathPrefix","fileAliases","FetchError","super","reason","response","DATA_URL_PATTERN","MIME_TYPE_PATTERN","compareMIMETypes","mimeType1","mimeType2","parseMIMETypeFromURL","matches","QUERY_STRING_PATTERN","stripQueryString","getResourceUrl","resource","getResourceMIMEType","contentTypeHeader","headers","noQueryUrl","mimeString","parseMIMEType","async","makeResponse","contentLength","byteLength","getResourceContentLength","initialDataUrl","INITIAL_DATA_LENGTH","blobSlice","reader","FileReader","readAsDataURL","buffer","bytes","Uint8Array","btoa","arrayBufferToBase64","getInitialDataUrl","TextEncoder","encode","checkResponse","shortUrl","urlEnd","substr","shortenUrlForDisplay","status","statusText","contentType","getResponseError","fetchFile","urlOrData","fetchOptions","filename","alias","startsWith","resolvePath","isRequestURL","isDataURL","isNodePath","loaders","fetchNode","fetch","probeLog","NullLog","global","DEFAULT_LOADER_OPTIONS","parseFloat","mimeType","nothrow","_len","_key","_len2","_key2","_len3","_key3","_len4","_key4","useLocalLibraries","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_nodeWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","credentials","redirect","referrer","referrerPolicy","integrity","keepalive","signal","getGlobalLoaderState","_state","getGlobalLoaderOptions","globalOptions","normalizeOptions","validateOptionsObject","idOptions","loaderOptions","deprecatedOptions","validateOptions","normalizeOptionsInternal","defaultOptions","loaderName","isSubOptions","suggestion","findSimilarOption","optionKey","lowerCaseOptionKey","bestSuggestion","lowerCaseKey","mergedOptions","baseUri","addUrlOptions","mergeNestedFields","getFetchFunction","isMobile","orientation","NodeWorker","terminate","workerURLCache","getLoadableWorkerURL","workerURL","getLoadableWorkerURLFromSource","workerUrl","getLoadableWorkerURLFromURL","workerSource","blob","URL","createObjectURL","getTransferList","recursive","transfers","transfersSet","isTransferable","MessagePort","ImageBitmap","OffscreenCanvas","NOOP","WorkerThread","terminated","onMessage","_loadableURL","isSupported","Worker","_createBrowserWorker","_createNodeWorker","isRunning","transferList","_getErrorFromErrorEvent","lineno","colno","onmessageerror","eval","WorkerJob","workerThread","_resolve","_reject","jobName","WorkerPool","onDebug","jobQueue","idleQueue","isDestroyed","startJob","job","startPromise","onStart","_startQueuedJob","_getAvailableWorker","queuedJob","backlog","returnWorkerToQueue","_getMaxConcurrency","DEFAULT_PROPS","WorkerFarm","workerPools","getWorkerFarm","_workerFarm","workerPool","_getWorkerPoolProps","getWorkerPool","NPM_TAG","_loadersgl_","parseWithWorker","parseOnMainThread","workerOptions","workerFile","versionTag","getWorkerURL","mergeLoaderOptions","baseOptions","newOptions","mergeOptionsRecursively","concatenateArrayBuffers","sourceArrays","source2","typedArray","sourceArray","concatenateArrayBuffersFromArray","DEFAULT_CHUNK_SIZE","toArrayBuffer","byteOffset","_toArrayBuffer","makeStreamIterator","stream","nextBatchPromise","currentBatchPromise","_streamReadAhead","releaseLock","makeBrowserStreamIterator","chunk","makeNodeStreamIterator","makeIterator","chunkSize","textEncoder","chunkLength","makeStringIterator","chunkByteLength","makeArrayBufferIterator","makeBlobIterator","ERR_DATA","getArrayBufferOrStringFromData","isArrayBuffer","TextDecoder","decode","getArrayBufferOrStringFromDataSync","arrayBuffers","concatenateArrayBuffersAsync","slashIndex","lastIndexOf","getLoaderContext","parentContext","newContext","baseUrl","queryString","extractQueryString","path","getGlobalLoaderRegistry","loaderRegistry","EXT_PATTERN","selectLoaderSync","validHTTPResponse","candidateLoaders","ignoreRegisteredLoaders","normalizeLoaders","testUrl","findLoaderByMIMEType","extension","loaderExtension","findLoaderByExtension","findLoaderByUrl","testDataAgainstText","testDataAgainstBinary","findLoaderByInitialBytes","getFirstCharacters","fallbackMimeType","selectLoaderInternal","getNoValidLoaderMessage","firstCharacters","mimeTypes","testText","tests","arrayBuffer1","arrayBuffer2","array1","array2","compareArrayBuffers","getMagicString","testBinary","dataView","DataView","magic","getUint8","contextLoaders","getLoadersFromContext","selectLoader","_parse","coreVersion","workerVersion","validateWorkerVersion","redirected","fromEntries","loaderWithParser","canParseWithWorker","parseSync","parseWithLoader","resolvedLoaders","resolvedOptions","Resource","_loadCount","_subscribers","subscribe","consumer","unsubscribe","inUse","getData","isLoaded","_error","_content","_loader","_data","loadCount","subscriber","onChange","ResourceManager","protocol","device","resourceManager","_resources","_consumers","_pruneRequest","resourceId","persistent","res","consumerId","requestId","prune","_ref3","resources","_track","_prune","finalize","consumers","oldResource","_pool","overAlloc","poolSize","setOptions","allocate","copy","initialize","maxCount","Type","newSize","BYTES_PER_ELEMENT","maxSize","newArray","_allocate","_release","release","sizeToAllocate","pool","findIndex","mathgl","precision","printTypes","printDegrees","printRowMajor","_cartographicRadians","formatValue","clamp","lerp","equals","epsilon","oldEpsilon","duplicateArray","MathArray","fromArray","ELEMENTS","check","targetArray","toObject","targetObject","arrayOrObject","fromObject","to","toTarget","toFloat32Array","formatString","exactEquals","negate","endValue","vector","minVector","maxVector","vectors","subtract","multiplyByScalar","scalar","valid","sub","setScalar","addScalar","subScalar","multiplyScalar","divideScalar","clampScalar","elements","checkNumber","checkVector","callerName","validateVector","Vector","lengthSquared","magnitude","magnitudeSquared","mathArray","distanceSquared","dist","dot","product","normalize","divide","lengthSq","distanceTo","distanceToSquared","getComponent","setComponent","addVectors","subVectors","multiplyVectors","addScaledVector","vec3_transformMat4AsVector","ORIGIN","ZERO","Vector3","freeze","az","bz","mag","cosine","acos","vec3_angle","cross","vec3_cross","radians","origin","vec3_rotateX","rotateY","vec3_rotateY","vec3_rotateZ","matrix4","transformAsPoint","vec3_transformMat4","transformAsVector","transformByMatrix3","matrix3","vec3_transformMat3","transformByMatrix2","matrix2","vec3_transformMat2","transformByQuaternion","quaternion","qx","qy","qz","qw","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","vec3_transformQuat","scratchVector","getFrustumPlane","normal","scratchArray","toDoublePrecisionArray","startIndex","endIndex","typedArrayManager","sourceIndex","targetIndex","subarray","mergeBounds","boundsList","mergedBounds","isMerged","Matrix","row","RANK","getElementIndex","setElement","getColumn","columnIndex","firstIndex","setColumn","columnVector","INDICES","DEFAULT_FOVY","DEFAULT_ASPECT","DEFAULT_NEAR","DEFAULT_FAR","Matrix4","getIdentityMatrix","getZeroMatrix","identity","m00","m10","m20","m30","m01","m11","m21","m31","m02","m12","m22","m32","m03","m13","m23","m33","setRowMajor","toRowMajor","fromQuaternion","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","mat4_fromQuat","frustum","column0Row0","column1Row1","column2Row0","column2Row1","column2Row2","column2Row3","column3Row2","computeInfinitePerspectiveOffCenter","mat4_frustum","lookAt","eye","up","x0","x1","y0","y1","z0","z1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","mat4_lookAt","mat4_ortho","orthographic","checkRadians","halfY","mat4_perspective","determinant","b4","b5","mat4_determinant","getScale","getTranslation","scaleResult","inverseScale0","inverseScale1","inverseScale2","getRotationMatrix3","transpose","mat4_transpose","mat4_invert","multiplyLeft","mat4_multiply","multiplyRight","mat4_rotateX","mat4_rotateY","mat4_rotateZ","rotateXYZ","angleXYZ","rotateAxis","axis","b12","b20","b21","b22","mat4_rotate","factor","mat4_scale","mat4_translate","vec4_transformMat4","vec2_transformMat4","vec2_transformMat4AsVector","transformPoint","transformVector","transformDirection","makeRotationX","makeTranslation","possiblyDegrees","matrix","mod","divisor","modulus","log2","LOG2E","PI_4","DEGREES_TO_RADIANS","RADIANS_TO_DEGREES","TILE_SIZE","EARTH_CIRCUMFERENCE","MAX_LATITUDE","DEFAULT_ALTITUDE","lngLatToWorld","phi2","worldToLngLat","xy","lambda2","atan","exp","getMeterZoom","latCosine","scaleToZoom","highPrecision","worldSize","unitsPerDegreeX","unitsPerDegreeY","altUnitsPerMeter","metersPerUnit","degreesPerUnit","latCosine2","unitsPerDegreeY2","altUnitsPerDegree2","altUnitsPerMeter2","addMetersToLngLat","lngLatZ","xyz","worldspace","newLngLat","newZ","getProjectionParameters","altitude","nearZMultiplier","farZMultiplier","altitudeToFovy","fovRadians","pitchRadians","fovyToAltitude","cameraToSeaLevelDistance","fovAboveCenter","topHalfSurfaceDistance","furthestDistance","horizonDistance","fov","worldToPixels","pixelProjectionMatrix","pixelsToWorld","pixelUnprojectionMatrix","targetZ","coord0","coord1","vec2","minExtent","maxZoom","west","south","east","north","getPaddingObject","nw","targetSize","scaleX","scaleY","offsetX","offsetY","centerLngLat","unprojectOnFarPlane","DEFAULT_DISTANCE_SCALES","Viewport","_frustumPlanes","_initProps","_initMatrices","projectFlat","unprojectFlat","subViewports","metersPerPixel","topLeft","coord","targetZWorld","unprojectOption","topRight","bottomLeft","bottomRight","containsPixel","getFrustumPlanes","panByPosition","coords","pixel","pow","meterOffset","fovyRadians","createProjectionMatrix","vpm","viewMatrixInverse","viewportMatrix","LayerManager","_lastRenderedLayers","_needsRedraw","_needsUpdate","_nextLayers","_debug","_defaultShaderModulesChanged","activateViewport","deck","timeline","mousePosition","layerManager","defaultShaderModules","renderPass","_finalizeLayer","needsRedraw","clearRedrawFlags","layerNeedsRedraw","getNeedsRedraw","needsUpdate","setNeedsRedraw","setNeedsUpdate","getLayers","layerIds","layerId","setLayers","newLayers","flatLayers","_updateLayers","updateLayers","addDefaultShaderModule","removeDefaultShaderModule","_handleError","raiseError","oldLayers","oldLayerMap","oldLayer","setChangeFlags","extensionsChanged","generatedLayers","_updateSublayersRecursively","_finalizeOldLayers","hasUniformTransition","newLayer","sublayers","validateProps","_transferLayerState","_updateLayer","_initializeLayer","isComposite","getSubLayers","lifecycle","_transferState","_finalize","depth","ViewManager","views","controllers","_viewports","_viewportMap","_isUpdating","_eventManager","eventManager","_eventCallbacks","onViewStateChange","onInteractionStateChange","controller","updateViewStates","viewId","updateTransition","getViewports","rect","getViews","viewMap","getView","getViewState","viewOrViewId","getViewStateId","filterViewState","getViewport","viewports","_setViews","_setViewState","_setSize","_rebuildViewports","_diffViews","_createController","Controller","onStateChange","makeViewport","_updateController","controllerProps","resolvedProps","oldControllers","invalidateControllers","oldController","hasController","_buildViewportMap","newViews","oldViews","_","PERCENT_OR_PIXELS_REGEX","parsePosition","relative","getPosition","extent","View","_x","_y","_width","_height","_padding","ViewportType","viewportDimensions","getDimensions","newViewState","dimensions","ControllerType","WebMercatorViewport","nearZ","farZ","worldOffset","legacyMeterSizes","projectionParameters","vm","relativeScale","getViewMatrix","_subViewports","minOffset","maxOffset","offsetViewport","fromLocation","newCenter","corners","unprojectOps","Transition","_inProgress","_handle","_timeline","onEnd","onInterrupt","_onUpdate","onUpdate","TRANSITION_EVENTS","DEFAULT_EASING","DEFAULT_INTERRUPTION","TransitionManager","_onTransitionUpdate","interpolator","startProps","endProps","easing","interpolateProps","propsInTransition","getControllerState","getViewportProps","oldViewState","getViewportInTransition","processViewStateChange","transitionTriggered","currentProps","_shouldIgnoreViewportChange","_isTransitionEnabled","interruption","_triggerTransition","transitionDuration","transitionInterpolator","_isUpdateDueToCurrentTransition","arePropsEqual","startViewstate","endViewStateProps","shortestPathFrom","getDuration","initialProps","initializeProps","transitionSettings","transitionEasing","transitionInterruption","onTransitionStart","_onTransitionEnd","onTransitionInterrupt","onTransitionEnd","inTransition","isZooming","isPanning","isRotating","TransitionInterpolator","extract","required","_propsToCompare","_propsToExtract","_requiredProps","startViewStateProps","_checkRequiredProps","DEFAULT_REQUIRED_PROPS","LinearInterpolator","transitionProps","normalizedOpts","around","startViewport","endViewport","aroundPosition","NO_TRANSITION_PROPS","INERTIA_EASING","EVENT_TYPES","pinchEventWorkaround","_events","_interactionState","isDragging","_customEvents","_eventStartBlocked","_panMove","invertPan","dragMode","inertia","scrollZoom","dragPan","dragRotate","doubleClickZoom","touchZoom","touchRotate","keyboard","transitionManager","ControllerState","_onTransition","_setInteractionState","handleEvent","customEvents","toggleEvents","_controllerState","eventStartBlocked","_onPanStart","_onPan","_onPanEnd","_onPinchStart","_onPinch","_onPinchEnd","_onTriplePanStart","_onTriplePan","_onTriplePanEnd","_onDoubleTap","_onWheel","_onKeyDown","controllerState","isPointInBounds","pos","handled","inside","isFunctionKeyPressed","blockEvents","timer","_getTransitionProps","isInteractive","eventNames","updateViewport","newControllerState","extraProps","interactionState","getState","params","newStates","alternateMode","rightButton","_onPanMove","_onPanRotate","_onPanMoveEnd","_onPanRotateEnd","pan","endPos","panEnd","rotateEnd","speed","smooth","rotateStart","zoomStart","_startPinchRotation","_lastPinchEvent","deltaAngleX","velocityZ","endScale","zoomEnd","isZoomOut","funcKey","zoomSpeed","moveSpeed","rotateSpeedX","rotateSpeedY","zoomOut","zoomIn","rotateLeft","moveLeft","rotateRight","moveRight","rotateUp","moveUp","rotateDown","moveDown","ViewState","_viewportProps","applyConstraints","MapState","minZoom","maxPitch","minPitch","startPanLngLat","startZoomLngLat","startRotatePos","startBearing","startPitch","startZoom","panStart","_getUpdatedState","_unproject","startPos","newProps","_ref4","deltaAngleY","newRotation","_getNewRotation","_ref5","_ref6","zoomedViewport","_zoomFromCenter","_panFromCenter","fromProps","halfHeightPixels","minLatitude","maxLatitude","normalizeViewportProps","centerY","startY","deltaScaleX","deltaScaleY","MapController","MapView","DEFAULT_LIGHT_COLOR","DEFAULT_LIGHT_INTENSITY","idCount","AmbientLight","intensity","DEFAULT_LIGHT_DIRECTION","DirectionalLight","_shadow","shadow","getProjectedLight","Pass","cleanup","LayersPass","_lastRenderIndex","canvasContext","getDrawingBufferSize","clearCanvas","clearColor","clearDepth","clearStencil","colorMask","parameters","scissorRect","beginRenderPass","framebuffer","_drawLayers","moduleParameters","onViewportActive","clearStack","pass","renderStats","drawLayerParams","_getDrawLayerParams","subViewport","_drawLayersInViewport","isPicking","layerFilter","cullRect","evaluateShouldDrawOnly","indexResolver","layerIndexResolver","drawContext","layerFilterCache","shouldDrawLayer","_shouldDrawLayer","layerParam","layerRenderIndex","_getModuleParameters","layerParameters","getLayerParameters","globalModuleParameters","glViewport","pixelRatio","cssToDeviceRatio","drawingBufferHeight","getGLViewport","clear","clearOpts","withParametersWebGL","scissorTest","scissor","clearWebGL","renderStatus","totalCount","visibleCount","compositeCount","pickableCount","setParameters","pickable","_drawLayer","getModuleParameters","visible","filterSubLayer","rootLayerId","overrides","internalState","wrapLongitude","picking","isActive","effect","layerIndices","resolvers","resolveLayerIndex","isDrawn","indexOverride","_offset","parentId","resolver","ShadowPass","shadowMap","createTexture","sampler","minFilter","magFilter","addressModeU","addressModeV","depthBuffer","format","mipmaps","dataFormat","fbo","createFramebuffer","colorAttachments","depthStencilAttachment","blend","depthRange","depthTest","shadowEnabled","drawToShadowMap","getMemoizedViewportCenterPosition","getMemoizedViewProjectionMatrices","shadowMatrices","projectionMatrices","screenToCommonSpace","shadowMatrix","positions","corner","DEFAULT_SHADOW_COLOR","shadowMaps","shadow_uDrawShadowMap","shadow_uUseShadowMap","shadow_uShadowMap0","dummyShadowMap","shadow_uShadowMap1","shadow_uColor","shadowColor","shadow_uLightId","shadowLightId","shadow_uLightCount","projectCenters","viewProjectionMatrices","viewProjectionMatrixCentered","createShadowUniforms","DEFAULT_AMBIENT_LIGHT_PROPS","DEFAULT_DIRECTIONAL_LIGHT_PROPS","LightingEffect","ambientLight","directionalLights","pointLights","shadowPasses","setup","_createShadowPasses","_addDefaultShaderModule","lightSource","_applyDefaultLights","preRender","_calculateMatrices","lightSources","directionalLight","pointLight","shadowPass","_removeDefaultShaderModule","lightMatrices","DEFAULT_LIGHTING_EFFECT","EffectManager","_resolvedEffects","_defaultEffects","_setEffects","addDefaultEffect","defaultEffects","compareEffects","e2","getEffects","oldEffectsMap","nextEffects","oldEffect","effectToAdd","removedEffectId","DrawLayersPass","operation","PICKING_BLENDING","blendColorOperation","blendColorSrcFactor","blendColorDstFactor","blendAlphaOperation","blendAlphaSrcFactor","blendAlphaDstFactor","PickLayersPass","_colorEncoderState","_drawPickingBuffer","pickingFBO","deviceRect","pickZ","colorEncoderState","_resetColorEncoder","useInPicking","decodePickingColor","decodeColor","isAttribute","pickParameters","depthMask","blendColor","encoded","byLayer","byAlpha","entry","encodeColor","pickedColor","pickedLayer","pickedViewports","pickedObjectIndex","DeckRenderer","drawPickingColors","drawLayersPass","pickLayersPass","renderCount","renderBuffers","lastPostProcessEffect","renderLayers","layerPass","renderOpts","_preRender","outputBuffer","_postRender","preRenderStats","postRender","_resizeRenderBuffers","texture","inputBuffer","swapBuffer","NO_PICKED_OBJECT","getClosestObject","pickedColors","deviceX","deviceY","deviceRadius","minSquareDistanceToCenter","closestPixelIndex","dy2","d2","pickedObject","pickedX","pickedY","getEmptyPickingInfo","coordinate","pickInfo","pickedViewport","getViewportFromCoordinates","picked","devicePixel","processPickInfo","lastPickedInfo","affectedLayers","lastPickedPixelIndex","lastPickedLayerId","pickedLayerId","lastPickedLayer","baseInfo","infos","getLayerPickingInfo","rootLayer","updateAutoHighlight","sourceLayer","getPickingInfo","DeckPicker","_pickable","depthFBO","pickObject","_pickClosestObject","pickObjects","_pickVisibleObjects","getLastPickedObject","lastPickedViewportId","_resizeBuffer","isTextureFormatRenderable","canvas","_getPickable","pickableLayers","radius","unproject3D","emptyInfo","devicePixelRange","cssToDevicePixels","_getPickingRect","deviceWidth","deviceHeight","_drawAndSample","pickedColors2","disablePickingIndex","restorePickingColors","maxObjects","leftTop","deviceLeft","deviceTop","rightBottom","deviceRight","deviceBottom","pickInfos","uniqueColors","colorKey","getUniqueObjects","uniquePickedObjects","uniqueInfos","limitMaxObjects","uniqueObjectsInLayer","pickedObjectKey","readPixelsToArrayWebGL","sourceX","sourceY","sourceWidth","sourceHeight","PLACEMENTS","DEFAULT_PLACEMENT","ROOT_CONTAINER_ID","WidgetManager","parentElement","defaultWidgets","widgets","resolvedWidgets","containers","lastViewports","getWidgets","_setWidgets","widget","_remove","addDefault","_add","nextWidgets","oldWidgetMap","oldWidget","placement","_getContainer","append","_element","viewContainer","_updateContainers","canvasWidth","canvasHeight","onRedraw","viewportsById","acc","onViewportChange","onHover","onEvent","eventOptions","defaultStyle","backgroundColor","Tooltip","isVisible","lastViewport","setTooltip","getTooltip","displayInfo","innerText","html","parseImageNode","IMAGE_SUPPORTED","Image","IMAGE_BITMAP_SUPPORTED","NODE_IMAGE_SUPPORTED","DATA_SUPPORTED","getImageType","image","getImageTypeOrNull","getImageData","drawImage","SVG_DATA_URL_PATTERN","SVG_URL_PATTERN","isSVG","getBlob","parseToImage","blobOrDataUrl","xmlText","unescape","getBlobOrSVGDataUrl","webkitURL","objectUrl","loadToImage","revokeObjectURL","EMPTY_OBJECT","imagebitmapOptionsSupported","parseToImageBitmap","imagebitmapOptions","imagebitmap","isEmptyObject","createImageBitmap","safeCreateImageBitmap","getISOBMFFMediaType","headerBytes","character","charCodeAt","checkString","decodeMajorBrand","BIG_ENDIAN","LITTLE_ENDIAN","getBinaryImageMetadata","binaryData","toDataView","isPng","getUint32","getPngMetadata","isJpeg","getUint16","tableMarkers","sofMarkers","getJpegMarkers","getJpegMetadata","isGif","getGifMetadata","isBmp","getBmpMetadata","mediaType","getISOBMFFMetadata","ImageLoader","batchType","imageType","getDefaultImageType","isImageTypeSupported","getLoadableImageType","parseToNodeImage","firstChar","lastChar","existingVersion","_registerLoggers","normalizedLoader","registeredLoader","registerLoaders","jsonLoader","premultiplyAlpha","checkVersion","lumaStats","getStats","luma","initializeLuma","uidCounters","uid","isObjectEmpty","isEmpty","handle","_device","destroyed","allocatedBytes","_attachedResources","mergedProps","selectivelyMerge","addStats","destroyResource","getProps","attachResource","detachResource","destroyAttachedResource","destroyAttachedResources","removeStats","statsManager","trackAllocatedMemory","trackDeallocatedMemory","Buffer","usage","indexType","mappedAtCreation","updateTimestamp","deducedProps","INDEX","Uint32Array","Uint16Array","incrementTimestamp","readSyncWebGL","debugData","_setDebugData","debugDataLength","DEBUG_DATA_MAX_LENGTH","decodeVertexType","TYPE_SIZES","getDataTypeBytes","TYPE_MAP","normalized","integer","signed","uint8","sint8","unorm8","snorm8","uint16","sint16","unorm16","snorm16","float16","float32","uint32","sint32","COMPRESSED_TEXTURE_FORMAT_PREFIXES","REGEX","decodeTextureFormat","srgb","suffix","decodedType","components","unsized","webgl","EXCEPTIONS","bpp","decodeNonStandardFormat","bbp","rgb9e5ufloat","rg11b10ufloat","rgb10a2unorm","stencil8","depth16unorm","depth24plus","depth32float","DeviceLimits","DeviceFeatures","disabledFeatures","feature","Device","manageState","requestMaxLimits","spector","break","initalizeFeatures","_lumaData","isTextureFormatCompressed","textureFormat","loseDevice","getCanvasContext","_createTexture","createCommandEncoder","readPixelsToBufferWebGL","setParametersWebGL","getParametersWebGL","resetWebGL","_getBufferProps","deviceMap","devices","registerDevices","deviceClasses","deviceClass","getAvailableDevices","getSupportedDevices","setDefaultDeviceProps","attachDevice","getDeviceMap","WebGL2RenderingContext","WebGLDevice","attach","UnknownDevice","createDevice","WebGPUDevice","enforceWebGL2","enforce","originalGetContext","contextId","isPage","isPageLoaded","readyState","DEFAULT_CANVAS_CONTEXT_PROPS","useDevicePixels","autoResize","colorSpace","alphaMode","CanvasContext","htmlCanvas","offscreenCanvas","_canvasSizeInfo","clientWidth","clientHeight","getPageLoadPromise","canvasId","getCanvasFromDOM","targetCanvas","createCanvas","visibility","ResizeObserver","getDevicePixelRatio","getPixelSize","dpr","getAspect","drawingBufferWidth","cssPixel","yInvert","ratio","xHigh","yHigh","scalePixels","setDevicePixelRatio","cachedSize","clampedPixelRatio","_setAutoCreatedCanvasId","GL_PARAMETER_DEFAULTS","Int32Array","hint","pixelStorei","bindFramebuffer","bindBuffer","glTarget","GL_PARAMETER_SETTERS","cullFace","depthFunc","useProgram","bindRenderbuffer","bindTransformFeedback","bindVertexArray","frontFace","lineWidth","stencilMaskSeparate","blendEquation","separateModes","blendEquationSeparate","blendFunc","separateFuncs","blendFuncSeparate","cull","dither","derivativeHint","mipmapHint","polygonOffsetFill","polygonOffset","sampleCoverage","stencilTest","stencilMask","mask","backMask","stencilFunc","backFunc","backRef","stencilFuncSeparate","stencilOp","sfail","dpfail","dppass","backSfail","backDpfail","backDppass","stencilOpSeparate","glEnum","GL_COMPOSITE_PARAMETER_SETTERS","stencilFuncFront","stencilFuncBack","stencilOpFront","stencilOpBack","GL_HOOKED_SETTERS","capability","pname","valueChanged","modeRGB","modeAlpha","dst","srcRGB","dstRGB","srcAlpha","dstAlpha","zNear","zFar","face","units","fail","zfail","zpass","GL_PARAMETER_GETTERS","NON_CACHE_PARAMETERS","setGLParameters","compositeSetters","glConstant","compositeSetter","getGLParameters","getter","getParameter","parameterKeys","deepArrayEqual","isArrayX","isArrayY","GLState","program","stateStack","copyState","_updateCache","oldValues","oldValue","cached","getContextState","trackContextState","originalUseProgram","glState","installProgramSpy","installSetterSpy","installGetterOverride","pushContextState","popContextState","functionName","originalGetterFunc","originalSetterFunc","DEFAULT_CONTEXT_PROPS","powerPreference","onContextLost","onContextRestored","getWebGLExtension","getExtension","getDeviceInfo","vendorMasked","rendererMasked","ext","WEBGL_debug_renderer_info","vendor","UNMASKED_VENDOR_WEBGL","renderer","UNMASKED_RENDERER_WEBGL","identifyGPUVendor","gpuBackend","identifyGPUBackend","gpuType","identifyGPUType","shadingLanguage","shadingLanguageVersion","getGLFromVertexType","texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","float32_renderable","float16_renderable","snorm8_renderable","norm16_renderable","snorm16_renderable","float32_filterable","float16_filterable","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","EXT_texture_norm16","EXT_render_snorm","TEXTURE_FEATURES","checkTextureFeature","every","TEXTURE_FORMATS","wgpu","gl2ext","attachment","depthTexture","DATA_FORMAT_CHANNELS","isTextureFormatSupported","convertTextureFormatToGL","formatInfo","webglFormat","getWebGLTextureParameters","formatData","decoded","getWebGLPixelDataFormat","compressed","getTextureFormatBytesPerPixel","WEBGL_FEATURES","WebGLDeviceFeatures","testedFeatures","getFeatures","isTextureFeature","getWebGLFeature","initializeFeatures","featureInfo","WebGLDeviceLimits","maxTextureDimension1D","maxTextureDimension2D","maxTextureDimension3D","maxTextureArrayLayers","maxBindGroups","maxDynamicUniformBuffersPerPipelineLayout","maxDynamicStorageBuffersPerPipelineLayout","maxSampledTexturesPerShaderStage","maxSamplersPerShaderStage","maxStorageBuffersPerShaderStage","maxStorageTexturesPerShaderStage","maxUniformBuffersPerShaderStage","maxUniformBufferBindingSize","maxStorageBufferBindingSize","minUniformBufferOffsetAlignment","minStorageBufferOffsetAlignment","maxVertexBuffers","maxVertexAttributes","maxVertexBufferArrayStride","maxInterStageShaderComponents","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup","maxComputeWorkgroupSizeX","maxComputeWorkgroupSizeY","maxComputeWorkgroupSizeZ","maxComputeWorkgroupsPerDimension","limits","parameter","Texture","dimension","mipLevels","Framebuffer","updateSize","resizeAttachments","autoCreateAttachmentTextures","createColorTexture","createDepthStencilTexture","RENDER_ATTACHMENT","resizedTexture","loadImage","crossOrigin","loadScript","scriptUrl","scriptId","withGLParameters","nocatch","setDeviceParameters","webglDevice","cullMode","ccw","cw","unclippedDepth","depthBias","depthBiasSlopeScale","provokingVertex","WEBGL_provoking_vertex","first","provokingVertexWEBGL","polygonMode","polygonOffsetLine","WEBGL_polygon_mode","line","polygonModeWEBGL","clipDistance0","clipDistance1","clipDistance2","clipDistance3","clipDistance4","clipDistance5","clipDistance6","clipDistance7","depthWriteEnabled","depthCompare","convertCompareFunction","stencilWriteMask","stencilReadMask","stencilCompare","glValue","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","convertStencilOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","colorSrcFactor","convertBlendFactorToFunction","colorDstFactor","alphaSrcFactor","alphaDstFactor","never","less","equal","greater","always","keep","zero","one","valueMap","convertSamplerParametersToWebGL","convertAddressMode","addressModeW","convertMaxFilterMode","mipmapFilter","convertMinFilterMode","lodMinClamp","lodMaxClamp","maxAnisotropy","addressMode","maxFilter","WEBGLBuffer","glUsage","glIndexType","bytesUsed","createBuffer","setSpectorMetadata","VERTEX","UNIFORM","getWebGLTarget","getWebGLUsage","_initWithData","_initWithByteLength","bufferData","bufferSubData","deleteBuffer","write","readAsync","getBufferSubData","Sampler","WEBGLSampler","createSampler","_setSamplerParameters","deleteSampler","samplerParameterf","samplerParameteri","TextureView","baseMipLevel","mipLevelCount","baseArrayLayer","arrayLayerCount","WEBGLTextureView","DEFAULT_WEBGL_TEXTURE_PROPS","pixelStore","border","textureUnit","WEBGLTexture","MAX_ATTRIBUTES","glFormat","loaded","_video","getWebGLTextureTarget","deleteTexture","createView","initializeCube","resolvedImageData","isVideo","HTMLVideoElement","HAVE_METADATA","_deduceParameters","activeTexture","bindTexture","setImageData","setSampler","isTextureFormatFilterable","generateMipmap","video","lastTime","HAVE_CURRENT_DATA","currentTime","setCubeMapImageData","samplerProps","setSubImageData","setImageData3D","_getDataType","texImage2D","levelIndex","levelData","compressedTexImage2D","bytesPerPixel","ndarray","shape","compressedTexSubImage2D","texSubImage2D","WebGLBuffer","copyFramebuffer","getActiveUnit","unbind","_deduceImageSize","ImageData","HTMLImageElement","naturalWidth","naturalHeight","videoWidth","videoHeight","imageDataMap","resolvedFaces","FACES","facePixels","lodLevel","setImageDataForFace","imageData","webglTextureFormat","texImage3D","logParameters","pvalue","texParameterf","texParameteri","WEBGLFramebuffer","isDefaultFramebuffer","prevHandle","attachmentPoint","_attachOne","getDepthStencilAttachmentWebGL","checkFramebufferStatus","_getFrameBufferStatus","deleteFramebuffer","colorAttachment","_attachTexture","textureView","framebufferTextureLayer","mapIndexToCubeMapFace","framebufferTexture2D","WebGLCanvasContext","presentationSize","_framebuffer","getCurrentFramebuffer","commit","DEFAULT_SPECTOR_PROPS","initialized","GLEnum","getWebGLContextData","makeDebugContext","WebGLDebugUtils","debugContext","glDebug","onGLError","onValidateGLFunc","WebGLDebugContext","setPrototypeOf","realContext","getDebugContext","getRealContext","getFunctionString","functionArgs","glFunctionArgsToString","glEnumToString","throwOnError","functionString","breakOn","formatCompilerMessage","lines","lineNum","inlineSource","numberedLines","lineIndex","sourceLine","getNumberedLine","getNumberedLines","linePos","escapedLine","replaceAll","paddedLength","padLeft","Shader","sourceMap","entryPoint","compilationStatus","getShaderIdFromProps","getCompilationInfoSync","getTranslatedSource","debugShader","messages","getCompilationInfo","_displayShaderLog","shaderName","shaderTitle","htmlLog","shaderLog","formattedLog","showSourceCode","currentMessage","formatCompilerLog","translatedSource","textAlign","errors","getElementsByClassName","scrollIntoView","dataURI","clipboard","writeText","getMessageType","lowerCaseType","WEBGLShader","createShader","_compile","deleteShader","_waitForCompilationComplete","errLog","segments","linePosition","lineNumber","rest","parseShaderCompilerLog","getShaderInfoLog","WEBGL_debug_shaders","getTranslatedShaderSource","addGLSLVersion","compileShader","_getCompilationStatus","waitMs","getShaderParameter","RenderPass","depthReadOnly","stencilReadOnly","discard","occlusionQuerySet","timestampQuerySet","beginTimestampIndex","endTimestampIndex","GL_COLOR","COLOR_CHANNELS","WEBGLRenderPass","glParameters","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","blendConstant","stencilReference","beginOcclusionQuery","queryIndex","webglQuerySet","endOcclusionQuery","clearMask","clearColorBuffer","drawBuffer","clearBufferiv","clearBufferuiv","clearBufferfv","RenderPipeline","vertexEntryPoint","vsConstants","fragmentEntryPoint","fsConstants","shaderLayout","bufferLayout","topology","bindings","linkStatus","setUniformsWebGL","isNumberArray","isTypedArray","splitUniformsAndBindings","uniform","TYPE_INFO","f32","f16","i32","u32","decodeVertexFormat","webglOnly","endsWith","type_","getAttributeInfosFromLayouts","attributeInfos","attribute","attributes","getAttributeInfoFromLayouts","shaderDeclaration","attr","getAttributeFromShaderLayout","bufferMapping","bufferLayouts","checkBufferLayouts","bufferLayoutInfo","bufferName","stepMode","vertexFormat","byteStride","getAttributeFromShortHand","attributeMapping","mapping","getAttributeFromAttributesList","getAttributeFromBufferLayout","attributeTypeInfo","attributeType","defaultVertexFormat","vertexType","getCompatibleVertexFormat","decodeShaderAttributeType","vertexFormatInfo","shaderType","shaderDataType","shaderComponents","bufferDataType","bufferComponents","ERR_TYPE_DEDUCTION","getTypedArrayFromGLType","glType","clamped","Uint8ClampedArray","Int8Array","Int16Array","DEFAULT_ACCESSOR_VALUES","stride","PROP_CHECKS","deprecatedProps","instanced","isInstanced","Accessor","getBytesPerElement","accessor","getBytesPerVertex","accessors","_assign","BYTES_PER_VERTEX","propChecks","removedProps","replacedProps","replacementProp","checkProps","SAMPLER_TYPES","COMPOSITE_GL_TYPES","decodeGLUniformType","glUniformType","typeAndSize","decodeGLAttributeType","glAttributeType","getShaderLayout","getProgramParameter","activeInfo","getActiveAttrib","compositeType","getAttribLocation","readAttributeDeclarations","uniformBlocks","getBlockParameter","blockIndex","getActiveUniformBlockParameter","blockCount","blockInfo","getActiveUniformBlockName","uniformCount","uniformIndices","uniformType","getActiveUniforms","uniformArrayLength","uniformOffset","uniformStride","getActiveUniform","arrayLength","readUniformBlocks","uniformBlock","minBindingSize","rawName","parseUniformName","webglLocation","getUniformLocation","uniformInfo","elementName","arrayElementUniformInfo","readUniformBindings","viewDimension","sampleType","getSamplerInfo","varyings","getTransformFeedbackVarying","varying","readVaryings","SAMPLER_UNIFORMS_GL_TO_GPU","setUniform","gl2","uniformValue","arrayValue","uniform1i","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","uniformMatrix2x3fv","uniformMatrix2x4fv","uniformMatrix3x2fv","uniformMatrix3x4fv","uniformMatrix4x2fv","uniformMatrix4x3fv","WEBGLRenderPipeline","introspectedLayout","_uniformCount","_uniformSetters","createProgram","bufferMode","transformFeedbackVaryings","_linkShaders","baseLayout","overrideLayout","mergedLayout","baseAttribute","mergeShaderLayout","deleteProgram","setBindings","binding","validBindings","disableWarnings","draw","vertexArray","vertexCount","instanceCount","firstVertex","transformFeedback","glDrawMode","getGLDrawMode","isIndexed","indexBuffer","_areTexturesRenderable","bindBeforeRender","begin","_applyBindings","_applyUniforms","webglRenderPass","withDeviceAndGLParameters","drawElementsInstanced","drawElements","drawArraysInstanced","drawArrays","unbindAfterRender","attachShader","linkProgram","_getLinkStatus","_reportLinkStatus","_waitForLinkComplete","getProgramInfoLog","validateProgram","texturesRenderable","uniformBufferIndex","getUniformBlockIndex","uniformBlockBinding","bindBufferBase","bindBufferRange","uniformLayout","CommandEncoder","measureExecutionTime","CommandBuffer","WEBGLCommandBuffer","commands","submitCommands","command","_copyBufferToBuffer","_copyBufferToTexture","_copyTextureToBuffer","_copyTextureToTexture","destination","copyBufferSubData","sourceOffset","destinationOffset","mipLevel","depthOrArrayLayers","bytesPerRow","rowsPerImage","destroyFramebuffer","getFramebuffer","webglBuffer","sourceParams","sourceFormat","sourceType","readPixels","destinationMipLevel","destinationOrigin","destinationX","destinationY","destinationZ","textureTarget","copyTexSubImage2D","copyTexSubImage3D","WEBGLCommandEncoder","commandBuffer","finish","copyBufferToBuffer","copyBufferToTexture","copyTextureToBuffer","copyTextureToTexture","resolveQuerySet","querySet","VertexArray","renderPipeline","locationInfos","attributeInfo","getAttributeInfosByLocation","setConstantWebGL","getScratchArrayBuffer","WEBGLVertexArray","bufferValue","isConstantAttributeZeroSupported","chrome","safari","mozInnerScreenX","createVertexArray","deleteVertexArray","setIndexBuffer","setBuffer","attributeBuffer","_getAccessor","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","_enable","_applyConstantAttributes","constant","setConstantAttributeWebGL","canDisableAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","constantValue","normalizeConstantArrayValue","updateNeeded","v1","v2","compareConstantArrayValues","getScratchArray","TransformFeedback","buffers","WEBGLTransformFeedback","unusedBuffers","bindOnUse","_bound","createTransformFeedback","setBuffers","deleteTransformFeedback","_bindBuffers","beginTransformFeedback","getGLPrimitive","endTransformFeedback","_unbindBuffers","locationOrName","bufferOrRange","_getVaryingIndex","_getBufferRange","_bindBuffer","getBuffer","isIndex","funcOrHandle","bufferIndex","isInteger","QuerySet","WEBGLQuerySet","_queryPending","_pollingPromise","createQuery","deleteQuery","beginTimestampQuery","_begin","endTimestampQuery","_end","conservative","beginTransformFeedbackQuery","endTransformFeedbackQuery","resolveQuery","pollQuery","beginQuery","endQuery","isResultAvailable","resultAvailable","getQueryParameter","isTimerDisjoint","getResult","getTimerMilliseconds","counter","poll","requestAnimationFrame","glFormatToComponents","readPixelsToArray","sourceAttachment","pixelArray","ArrayType","getPixelArray","arrayOrType","getGLTypeFromTypedArray","readPixelsToBuffer","targetByteOffset","webglFramebuffer","webglBufferTarget","glTypeToBytes","commandEncoder","toFramebuffer","ERR_ARGUMENTS","lost","_resolveContextLost","_version","isWebGL","loadWebGLDeveloperTools","SPECTOR","loadSpectorJS","pageLoaded","allSettled","LOG_LEVEL","onCreateError","statusMessage","createBrowserContext","spectorJS","Spector","spyCanvases","onCaptureStarted","onCapture","getResultUI","resultView","addCapture","startCapture","stopCapture","initializeSpectorJS","_extensions","isLost","isContextLost","getSize","createCanvasContext","createExternalTexture","createQuerySet","createRenderPipeline","createComputePipeline","beginComputePass","submit","stencil","clearFlags","_polyfilled","deviceLossTriggered","WEBGL_lose_context","loseContext","pushState","popState","__SPECTOR_Metadata","getGLKey","_constants","currentConstant","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","setConstantFloatArray","vertexAttribI4iv","setConstantIntArray","vertexAttribI4uiv","setConstantUintArray","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","onAddHTML","onInitialize","onRender","onFinalize","autoResizeViewport","autoResizeDrawingBuffer","AnimationLoop","animationProps","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","_onMousemove","_onMouseleave","_setDisplay","appContext","_initDevice","_getAnimationProps","_cancelAnimationFrame","_requestAnimationFrame","_beginFrameTimers","_setupFrame","_updateAnimationProps","_renderFrame","_clearNeedsRedraw","_endFrameTimers","attachTimeline","detachTimeline","waitForRender","toDataURL","_startEventHandling","_initializeAnimationProps","_resizeCanvasDrawingBuffer","_resizeViewport","animationLoop","_animationFrame","timerId","cancelAnimationFrame","tick","tock","_mousePosition","_getSizeAndAspect","_createInfoDiv","wrapperDiv","div","MouseEvent","oldHandler","predict","enhancePointerEventInput","hammerjs","RECOGNIZERS","RECOGNIZER_COMPATIBLE_MAP","tripan","pinch","doubletap","anytap","RECOGNIZER_FALLBACK_MAP","BASIC_EVENT_ALIASES","INPUT_EVENT_TYPES","KEY_EVENTS","MOUSE_EVENTS","WHEEL_EVENTS","EVENT_RECOGNIZER_MAP","tap","press","pinchin","pinchout","pinchstart","pinchmove","pinchend","pinchcancel","rotatemove","rotatecancel","tripanstart","tripanmove","tripanup","tripandown","tripanleft","tripanright","tripanend","tripancancel","panup","pandown","panleft","panright","pancancel","swipe","swipeleft","swiperight","swipeup","swipedown","GESTURE_EVENT_ALIASES","anyclick","passiveSupported","firefox","EVENT_TYPE","WHEEL_DELTA_MAGIC_SCALER","WheelInput","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","enableEventType","MOVE_EVENT_TYPE","OVER_EVENT_TYPE","OUT_EVENT_TYPE","ENTER_EVENT_TYPE","LEAVE_EVENT_TYPE","MoveInput","handleOverEvent","handleOutEvent","handleEnterEvent","handleLeaveEvent","handleMoveEvent","enableMoveEvent","enableLeaveEvent","enableEnterEvent","enableOutEvent","enableOverEvent","_emit","DOWN_EVENT_TYPE","UP_EVENT_TYPE","KeyInput","targetElement","enableDownEvent","enableUpEvent","tabIndex","outline","ContextmenuInput","whichButtons","leftButton","middleButton","getOffsetPosition","rootElement","getBoundingClientRect","offsetWidth","offsetHeight","clientLeft","clientTop","DEFAULT_OPTIONS","EventRegistrar","mjolnirEvent","_normalizeEvent","handlersByElement","_active","insertPosition","immediatePropagationStopped","stopImmediatePropagation","entriesToRemove","recognizerOptions","EventManager","_onBasicInput","_onOtherEvent","ManagerClass","otherName","recognizerName","recognizerOption","wheelInput","moveInput","keyInput","contextmenuInput","eventAlias","eventRegistrar","_toggleRecognizer","_addEventHandler","watch","_removeEventHandler","fallbackRecognizers","isRecognizerUsed","pickingRadius","deviceProps","glOptions","eventRecognizerOptions","_animate","_typedArrayManagerProps","_customRender","onDeviceInitialized","onWebGLInitialized","onResize","onBeforeRender","onAfterRender","onLoad","cause","_onMetrics","getCursor","Deck","viewManager","effectManager","deckRenderer","deckPicker","widgetManager","tooltip","cursorState","metrics","fps","setPropsTime","updateAttributesTime","framesRedrawn","pickTime","pickCount","gpuTimePerFrame","cpuTimePerFrame","bufferMemory","textureMemory","renderbufferMemory","gpuMemory","_metricsCounter","_pickRequest","_lastPointerDownInfo","_onPointerMove","layerHandler","rootHandler","_onPointerDown","pickedInfo","_pick","WebGLRenderingContext","deviceOrPromise","_createCanvas","_createAnimationLoop","_setCanvasSize","_getViews","_getViewState","viewManagerNeedsRedraw","layerManagerNeedsRedraw","effectManagerNeedsRedraw","deckRendererNeedsRedraw","redrawReason","isInitialized","pickMultipleObjects","_addResources","_removeResources","resourceIds","_addDefaultEffect","statKey","cssWidth","cssHeight","_updateCanvasSize","newWidth","newHeight","_setDevice","_onRenderFrame","normalizedViews","_onContextLost","_pickAndCallback","_updateCursor","pointerleave","_onViewStateChange","_onInteractionStateChange","renderOptions","_getFrameStats","_getMetrics","animationLoopStats","memoryStats","inheritsFrom","ParentType","getDataTypeFromTypedArray","getTypedArrayFromDataType","getVertexFormatFromAttribute","dataTypeFromTypedArray","getBufferAttributeLayout","getStride","bytesPerElement","resolveShaderAttribute","baseAccessor","shaderAttributeOptions","vertexOffset","elementOffset","DataColumn","_buffer","logicalType","doublePrecision","bufferType","defaultType","Float64Array","typedArrayFromDataType","fp64","externalBuffer","bufferAccessor","allocatedValue","numInstances","isConstant","getAccessor","shaderAttributeDef","_getBufferLayout","doubleShaderAttributeDefs","high","low","resolveDoublePrecisionShaderAttributes","setAccessor","_normalizeValue","normalizeConstant","_areValuesEqual","_checkExternalBuffer","requiredBufferSize","_createBuffer","updateSubBuffer","startOffset","endOffset","illegalArrayType","value1","value2","EMPTY_ARRAY","placeholderArray","EMPTY","FULL","DEFAULT_TRANSITION_SETTINGS","interpolation","spring","stiffness","damping","normalizeTransitionSettings","userSettings","layerSettings","Attribute","startIndices","lastExternalBuffer","binaryValue","binaryAccessor","layoutChanged","updateRanges","_autoUpdater","_validateAttributeUpdaters","clearChangedFlags","accessor1","accessor2","getUpdateTriggers","supportsTransition","getTransitionSetting","dataRange","startRow","endRow","rangeList","newRangeList","range0","clearNeedsUpdate","noAlloc","updateBuffer","updated","getVertexOffset","_checkAttributeArray","setConstantValue","setExternalBuffer","setBinaryValue","needsNormalize","nested","elementStride","getAccessorFromBuffer","shaderAttributeDefs","shaderAttributes","shaderAttributeName","getBufferLayout","modelInfo","accessorFunc","iterable","objectInfo","createIterable","objectValue","numVertices","getPassthroughFS","inputChannels","channelCountToType","variable","convertToVec4","UniformBlock","modifiedUniforms","modified","bindingLayout","setUniforms","_setUniform","getAllUniforms","arrayA","arrayB","arrayEqual","numberArray","arrayCopy","UNIFORM_FORMATS","decodeShaderUniformType","alignTo","UniformBufferLayout","typeAndComponents","actualByteLength","uniformValues","typedArrays","numericArray","UniformStore","uniformBufferLayouts","uniformBuffers","blocks","block","uniformBufferName","uniformBufferLayout","defaultUniforms","uniformBuffer","blockName","updateUniformBuffers","getUniformBufferByteLength","getUniformBufferData","createUniformBuffer","COPY_DST","uniformBufferData","getManagedUniformBuffer","bufferReason","updateUniformBuffer","ParseContext","constants","aliases","structs","Node","isAstNode","astNodeType","evaluate","evaluateString","Statement","returnType","StaticAssert","expression","While","Continuing","For","increment","Var","access","Override","Let","Const","IncrementOperator","AssignOperator","TokenClass","ResourceType","Increment","operator","Assign","Call","Loop","continuing","Switch","elseif","_else","else","Return","Enable","Alias","Discard","Break","Continue","isStruct","Struct","members","getMemberIndex","TemplateType","PointerType","SamplerType","Expression","StringExpr","CreateExpr","CallExpr","acosh","asin","asinh","atanh","sign","sinh","tanh","trunc","VariableExpr","ConstExpr","initializer","postfix","struct","memberIndex","LiteralExpr","BitcastExpr","TypecastExpr","GroupingExpr","contents","Operator","UnaryOperator","BinaryOperator","SwitchCase","Case","selector","Default","Argument","ElseIf","Member","TokenType","rule","TokenTypes","none","reserved","eof","token","asm","bf16","do","enum","f64","i8","i16","i64","mat","premerge","regardless","typedef","u8","u16","u64","unless","using","void","keywords","keyword","atomic","bool","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","ptr","sampler_comparison","texture_1d","texture_2d","texture_2d_array","texture_3d","texture_cube","texture_cube_array","texture_multisampled_2d","texture_storage_1d","texture_storage_2d","texture_storage_2d_array","texture_storage_3d","texture_depth_2d","texture_depth_2d_array","texture_depth_cube","texture_depth_cube_array","texture_depth_multisampled_2d","texture_external","vec3","bitcast","case","continue","fallthrough","false","function","if","let","const","loop","while","read_write","switch","true","var","override","workgroup","r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32uint","r32sint","r32float","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm_srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm_srgb","rg11b10float","rg32uint","rg32sint","rg32float","rgba16uint","rgba16sint","rgba16float","rgba32uint","rgba32sint","rgba32float","static_assert","tokens","decimal_float_literal","hex_float_literal","int_literal","uint_literal","ident","and","and_and","arrow","attr_left","attr_right","forward_slash","bang","bracket_left","bracket_right","brace_left","brace_right","colon","comma","equal_equal","not_equal","greater_than","greater_than_equal","shift_right","less_than","less_than_equal","shift_left","modulo","minus","minus_minus","period","plus","plus_plus","or","or_or","paren_left","paren_right","semicolon","star","tilde","underscore","xor","plus_equal","minus_equal","times_equal","division_equal","modulo_equal","and_equal","or_equal","xor_equal","shift_right_equal","shift_left_equal","storage_class","access_mode","sampler_type","sampled_texture_type","multisampled_texture_type","storage_texture_type","depth_texture_type","texture_external_type","any_texture_type","texel_format","const_literal","literal_or_ident","element_count_expression","template_types","attribute_name","assignment_operators","increment_operators","Token","lexeme","isTemplateType","isArrayType","isArrayOrTemplateType","WgslScanner","_tokens","_start","_current","_line","scanTokens","_isAtEnd","scanToken","_advance","_isWhitespace","_peekAhead","commentLevel","matchType","matchedType","_findType","nextLexeme","foundLessThan","_addToken","lookAheadLexeme","lookAhead","maxLookAhead","_match","amount","WgslParser","tokensOrCode","statements","statement","_global_decl_or_directive","scanner","_peek","_check","_consume","_previous","_type_alias","_enable_directive","attrs","_attribute","_var","_global_variable_decl","_override","_override_variable_decl","_let","_global_let_decl","_const","_global_const_decl","_struct","_struct_decl","_fn","_function_decl","argAttrs","typeAttrs","_type_decl","_return","_compound_statement","_statement","_if_statement","_switch_statement","_loop_statement","_for_statement","_while_statement","_continuing_statement","_static_assert_statement","_return_statement","_variable_statement","_increment_decrement_statement","_func_call_statement","_assignment_statement","_optional_paren_expression","_for_init","_short_circuit_or_expression","_for_increment","_variable_decl","savedPos","_unary_expression","decrement","isUnderscore","_argument_expression_list","_switch_body","cases","_case_selectors","_case_body","_cases","_c","_d","selectors","_shift_expression","nextStatement","_match_elseif","_elseif_statement","expr","_short_circuit_and_expr","_inclusive_or_expression","_exclusive_or_expression","_and_expression","_equality_expression","_relational_expression","_additive_expression","_multiplicative_expression","_singular_expression","_primary_expression","_postfix_expression","_getStruct","_paren_expression","memberAttrs","memberName","memberType","structNode","_const_expression","_override_decl","valueExpr","constValue","aliasType","aliasNode","typeName","_texture_sampler_types","pointer","decl","countInt","TypeInfo","isTemplate","MemberInfo","align","StructInfo","ArrayInfo","TemplateInfo","VariableInfo","resourceType","AliasInfo","_TypeSize","InputInfo","locationType","OutputInfo","FunctionInfo","inputs","outputs","EntryFunctions","OverrideInfo","WgslReflect","textures","samplers","_types","_isStorageTexture","ast","_getTypeInfo","_getAliasInfo","_getAttributeNum","_isUniformVar","varInfo","Uniform","_isStorageVar","isStorageTexture","StorageTexture","Storage","_isTextureVar","_isSamplerVar","vertexStage","_getAttribute","fragmentStage","computeStage","_getInputs","_getOutputs","getBindGroups","groups","_makeRoom","_getStructOutputs","_getOutputInfo","typeInfo","locationValue","_parseInt","_getStructInputs","_getInputInfo","_parseString","_getAlias","_updateTypeInfo","formatIsType","typeSize","_getTypeSize","_updateStructInfo","lastSize","lastOffset","structAlign","member","sizeInfo","_roundUp","explicitSize","explicitAlign","_typeInfo","arrayType","_textureTypes","_samplerTypes","getShaderLayoutFromWGSL","parsedWGSL","parseWGSL","getType","attributeCount","wgslAttribute","GPUGeometry","indices","getVertexCount","getAttributes","getIndexes","_calculateVertexCount","makeGPUGeometry","getIndexBufferFromGeometry","getAttributeBuffersFromGeometry","ShaderInputs","moduleBindings","moduleUniformsChanged","resolvedModules","_resolveModules","resolvedModule","moduleProps","oldUniforms","getModules","getUniformValues","getBindings","getDebugTable","ComputePipeline","PipelineFactory","_hashCounter","_hashes","_renderPipelineCache","_computePipelineCache","getDefaultPipelineFactory","defaultPipelineFactory","allProps","_hashRenderPipeline","pipeline","useCount","_hashComputePipeline","_getHash","vsHash","fsHash","bufferLayoutHash","parameterHash","ShaderFactory","_cache","getDefaultShaderFactory","defaultShaderFactory","_hashShader","cacheEntry","ctx","Model","moduleSettings","constantAttributes","shaderInputs","pipelineFactory","shaderFactory","debugShaders","bufferAttributes","_uniformStore","_attributeInfos","_gpuGeometry","_getModuleUniforms","_pipelineNeedsUpdate","_destroyed","_lastDrawTimestamp","setShaderInputs","getPlatformInfo","setGeometry","_updatePipeline","_setGeometryAttributes","setInstanceCount","setVertexCount","setAttributes","setConstantAttributes","updateModuleSettings","_getBindingsUpdateTimestamp","predraw","updateShaderInputs","drawSuccess","_logDrawCallStart","indexCount","_logDrawCallEnd","_logFramebuffer","gpuGeometry","setTopology","mergeBufferLayouts","_setPipelineNeedsUpdate","setBufferLayout","setTransformFeedback","getAttributeNames","attributeNames","prevShaderVs","prevShaderFs","_lastLogTime","_logOpen","logDrawTimeout","shaderLayoutTable","attributeDeclaration","varyingDeclaration","getDebugTableForShaderLayout","uniformTable","attributeTable","_getAttributeDebugTable","_drawCount","debugFramebuffers","minimap","opaque","rgbaScale","createImageData","putImageData","debugFramebuffer","_getBufferOrConstantValues","TypedArrayConstructor","layouts1","layouts2","layouts","attribute2","BufferTransform","model","feedbackBuffers","varyingName","fp64ify","hiPart","loPart","fp64LowPart","fp64ifyMatrix4","matrixFP64","CONST_UNIFORMS","ONE","fp64arithmetic","padArrayChunk","sourceLength","targetLength","datum","getAttributeTypeFromSize","getFloat32VertexFormat","cycleBuffers","matchBuffer","padBuffer","fromLength","toLength","fromStartIndices","precisionMultiplier","toStartIndices","hasStartIndices","toData","getMissingData","sourceStartIndices","targetStartIndices","getChunkData","nextSourceIndex","nextTargetIndex","padArray","GPUTransitionBase","currentLength","attributeInTransition","newAttribute","cloneAttribute","currentStartIndices","multiplier","maxVertexOffset","shaderAttribute","getAttributeBufferLength","vs64","useFp64","TRANSITION_TYPES","attributeSize","inputFormat","ATTRIBUTE_TYPE","ATTRIBUTE_SIZE","getTransform","prevLength","prevStartIndices","enter","aFrom","aTo","vCurrent","getTexture","aPrev","aCur","vNext","AttributeTransitionManager","_removeTransition","_updateAttribute","hasAttribute","animatedAttributes","isNew","TransitionType","TRACE_INVALIDATE","AttributeManager","mergeBoundsMemoized","updateTriggers","attributeTransitionManager","addInstanced","attributeNameArray","invalidate","triggerName","invalidatedAttributes","_invalidateTrigger","invalidateAll","accessorName","transitionUpdated","getChangedAttributes","changedAttributes","getBufferLayouts","overrideOptions","_mapUpdateTriggersToAttributes","triggers","updateSpringElement","cur","distanceSquare","_value","fromValue","toValue","_currValue","_prevValue","nextValue","updateSpring","UniformTransitionManager","active","diffProps","propsChangedReason","compareProps","ignoreProps","dataChangedReason","dataChanged","dataComparator","_dataDiff","diffDataProps","updateTriggersChangedReason","diffUpdateTrigger","diffUpdateTriggers","propsChanged","updateTriggersChanged","diffExtensions","transitionsChanged","diffTransitions","comparePropValues","newProp","oldProp","oldExtensions","newTriggers","oldTriggers","isPlainObject","mergeShaders","mergedInjection","lngLatZToWorldPosition","getWorldPosition","fromCoordinateSystem","fromCoordinateOrigin","normalizeParameters","autoOffset","worldPosition","positionCommonSpace","DEFAULT_TEXTURE_PARAMETERS","internalTextures","TYPE_DEFINITIONS","boolean","optional","valueType","ignore","component","dataTransform","owner","samplerParameters","textureParameters","parsePropType","normalizePropDefinition","MergedDefaultPropsCacheKey","getPropsPrototype","componentClass","cacheKey","ExtensionClass","extensionName","getOwnProperty","parentClass","parentDefaultProps","componentDefaultProps","componentPropDefs","propDefs","deprecatedFor","parsePropTypes","extensionDefaultProps","componentName","getComponentName","defineProperties","writable","createPropsPrototype","defaultValues","descriptors","getDescriptorForAsyncProp","addAsyncPropsToPropPrototype","nameStr","newPropName","addDeprecatedPropsToPropPrototype","_propTypes","createPropsPrototypeAndTypes","hasAsyncProp","getAsyncProp","propObjects","propsPrototype","propsInstance","createProps","asyncProps","EMPTY_PROPS","ComponentState","onAsyncPropUpdated","oldAsyncProps","asyncProp","resolvedValue","resetOldProps","getOldProps","isAsyncPropLoading","pendingLoadCount","resolvedLoadCount","reloadAsyncProp","_watchPromise","setAsyncProps","resolvedValues","originalValues","_createAsyncPropData","_updateAsyncProp","_fetch","_onResolve","_onError","_didAsyncInputValueChange","_resolveAsyncIterable","_setPropValue","_freezeAsyncOldProps","lastValue","_postProcessValue","_setAsyncPropValue","LayerState","attributeManager","subLayers","usesPickingColorCache","onDataLoad","MAX_PICKING_COLOR_CACHE_SIZE","areViewportsEqual","oldViewport","pickingColorCache","__diff","loadOptions","getLoadOptions","inResourceManager","positionFormat","colorFormat","getPolygonOffset","highlightedObjectIndex","autoHighlight","highlightColor","layerName","root","partialState","stateChanged","isPickable","getModels","models","setModuleParameters","setShaderModuleProps","getAttributeManager","getCurrentLayer","use64bitPositions","pickingEvent","nullPickingColor","encodePickingColor","i1","i2","i3","getNumInstances","getStartIndices","getShaders","shaders","shouldUpdateState","changeFlags","propsOrDataChanged","updateState","hasPickingBuffer","needsPickingBuffer","getNeedsPickingBuffer","pickingColors","instancePickingColors","pickingColorsAttribute","finalizeState","uniformTransitions","_getNeedsRedraw","_getUpdateParams","viewportChanged","invalidateAttribute","updateAttributes","bufferLayoutChanged","_setModelAttributes","_updateAttributes","_updateAttributeTransition","_updateUniformTransition","calculateInstancePickingColors","cacheSize","newCacheSize","pickingColor","excludeAttributes","attributeBuffers","objectIndex","_disablePickingIndex","colors","externalColorAttribute","objectColor","_getAttributeManager","_clearChangeFlags","_onAsyncPropUpdated","initializeState","_diffProps","stateNeedsUpdate","currentViewport","updateParams","oldModels","modelChanged","_postUpdate","offsets","getChangeFlags","flagChanged","prevDataChangedReason","somethingChanged","_updateAutoHighlight","highlightedObjectColor","attributeManagerNeedsRedraw","onNeedsRedraw","MAP_STYLE","evaluateChildren","childProps","isComponent","deckGLViewProps","needsDeckGLViewProps","wrapInView","CANVAS_ONLY_STYLES","mixBlendMode","redrawDeck","DeckGL","setVersion","control","canvasRef","jsxProps","reactChildren","jsxLayers","jsxViews","reactElement","ElementType","LayerType","reactProps","extractJSXLayers","inRender","handleViewStateChange","viewStateUpdateRequested","handleInteractionStateChange","interactionStateUpdateRequested","deckProps","forwardProps","DeckClass","lastRenderedViewports","createDeckInstance","getRefHandles","currentViewports","ContextProvider","containerStyle","canvasStyle","extractStyles","childrenUnderViews","defaultViewId","viewChildren","viewElement","offsetParent","positionChildrenUnderViews","zero$1","buf","LITERALS$1","L_CODES$1","D_CODES$1","MAX_BITS$1","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","MAX_MATCH$1","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","pending_buf","send_bits","bi_valid","bi_buf","send_code","tree","bi_reverse","gen_codes","bl_count","next_code","bits","init_block","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","sym_next","bi_windup","smaller","_n2","_m2","pqdownheap","heap","heap_len","compress_block","ltree","dtree","extra","sx","sym_buf","build_tree","desc","stree","heap_max","gen_bitlen","xbits","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block$1","stored_len","_tr_init_1","tr_static_init","LENGTH_CODES$1","l_desc","d_desc","bl_desc","_tr_flush_block_1","_tr_flush_block$1","opt_lenb","static_lenb","max_blindex","strm","data_type","block_mask","detect_data_type","BL_CODES$1","build_bl_tree","strategy","send_all_trees","lcodes","dcodes","blcodes","rank","_tr_tally_1","_tr_tally$1","sym_end","trees","_tr_init","_tr_stored_block","_tr_flush_block","_tr_tally","_tr_align","STATIC_TREES","bi_flush","adler32_1","adler32","adler","s1","s2","crcTable","makeTable","crc32_1","crc32","crc","constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","Z_NO_FLUSH$2","Z_FULL_FLUSH$1","Z_FINISH$3","Z_BLOCK$1","Z_OK$3","Z_STREAM_END$3","Z_STREAM_ERROR$2","Z_DATA_ERROR$2","Z_BUF_ERROR$1","Z_DEFAULT_COMPRESSION$1","Z_DEFAULT_STRATEGY$1","Z_DEFLATED$2","MAX_MATCH","MIN_LOOKAHEAD","INIT_STATE","BUSY_STATE","FINISH_STATE","errorCode","msg","slide_hash","wsize","w_size","hash_size","HASH","HASH_ZLIB","hash_shift","hash_mask","flush_pending","avail_out","pending_out","next_out","total_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","avail_in","next_in","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","insert","ins_h","deflate_stored","flush","have","min_block","pending_buf_size","used","high_water","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","configuration_table","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","HEAP_SIZE","MAX_BITS","lit_bufsize","deflateStateCheck","deflateResetKeep","deflateReset","ret","deflateInit2","windowBits","memLevel","deflate_2$1","deflate$2","old_flush","level_flags","hcrc","comment","os","beg","gzhead_extra","bstate","deflate_huff","deflate_rle","deflateSetDictionary_1","deflateSetDictionary","dictionary","dictLength","tmpDict","avail","deflate_1$2","deflateInit","deflateSetHeader","deflate","deflateEnd","deflateInfo","_has","flattenChunks","chunks","STR_APPLY_UIA_OK","__","_utf8len","strings","string2buf","c2","m_pos","str_len","buf_len","buf2string","utf16buf","c_len","buf2binstring","utf8border","zstream","toString$1","Z_NO_FLUSH$1","Z_FINISH$2","Z_OK$2","Z_STREAM_END$2","Z_DEFLATED$1","Deflate$1","opt","raw","gzip","ended","dict","_dict_set","deflate$1","deflator","flush_mode","_flush_mode","onData","deflate_1$1","Deflate","deflateRaw","BAD$1","inffast","_in","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","MAXBITS","lbase","lext","dbase","dext","inftrees","inflate_table","lens","lens_index","codes","table_index","work","incr","sym","curr","drop","huff","offs","here_bits","here_op","here_val","Z_FINISH$1","Z_OK$1","Z_STREAM_END$1","Z_NEED_DICT$1","Z_STREAM_ERROR$1","Z_DATA_ERROR$1","Z_MEM_ERROR$1","HEAD","DICT","TYPE","TYPEDO","COPY_","LEN_","LEN","CHECK","BAD","zswap32","InflateState","havedict","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","inflateStateCheck","inflateResetKeep","inflateReset","inflateReset2","inflateInit2","lenfix","distfix","virgin","fixedtables","updatewindow","inflate_2$1","inflate$2","put","last_bits","last_op","last_val","hbuf","inf_leave","xflags","extra_len","inflate_1$2","inflateInit","inflate","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","gzheader","Inflate$1","inflate$1","inflator","last_avail_out","next_out_utf8","utf8str","inflate_1$1","Inflate","inflateRaw","ungzip","pako","thisArg","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isString","isNumber","isDate","isFile","isFileList","isURLSearchParams","isRequest","isHeaders","allOwnKeys","findKey","_global","isContextDefined","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","isFormData","kind","FormData","isArrayBufferView","isStream","caseless","assignValue","targetKey","stripBOM","content","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","lastIndex","arr","forEachEntry","pair","matchAll","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","toCamelCase","toFiniteNumber","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","AxiosError","captureStackTrace","utils","toJSON","description","fileName","columnNumber","customProps","axiosError","isVisitable","removeBrackets","renderKey","dots","predicates","formData","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","convertValue","toISOString","isFlatArray","exposedHelpers","build","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serializeFn","serialize","serializedParams","hashmarkIndex","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","classes","URLSearchParams","protocols","hasBrowserEnv","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","platform","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","transitional","transitionalDefaults","adapter","transformRequest","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","isValidHeaderName","rawHeaders","parsed","parseHeaders","tokensRE","parseTokens","matcher","deleted","deleteHeader","formatHeader","targets","asStrings","computed","defineAccessor","methodName","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","samplesCount","timestamps","firstSampleTS","startedAt","bytesCount","passed","freq","isDownloadStream","bytesNotified","_speedometer","speedometer","throttle","lengthComputable","progressBytes","progress","estimated","msie","urlParsingNode","originURL","resolveURL","host","hostname","port","pathname","requestURL","expires","domain","secure","cookie","toGMTString","decodeURIComponent","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","username","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","progressEventReducer","upload","abort","aborted","parseProtocol","send","composeSignals","signals","AbortController","streamChunk","trackStream","onProgress","onFinish","readBytes","pull","close","enqueue","highWaterMark","fetchProgressDecorator","isFetchSupported","Request","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","getBodyLength","finished","composedSignal","stopTimeout","requestContentLength","_request","isStreamResponse","responseContentLength","responseData","knownAdapters","http","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators","deprecatedWarnings","validator","formatMessage","ERR_DEPRECATED","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","HttpStatusCode","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","Cancel","spread","isAxiosError","formToJSON","getAdapter","basename","fetchLocalCsv","responseSchool","responseSchoolString","csvString","currentLine","csv2object","amenity","DefaultContext","IconContext","_excluded","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_extends","ownKeys","_objectSpread","_defineProperty","toPrimitive","_toPrimitive","_toPropertyKey","Tree2Element","GenIcon","IconBase","elem","conf","svgProps","computedSize","FiEyeOff","FiEye","selectedValue","setIsOpen","handleChange","handleChangeSelect","selectedCountry","layersCheckbox","setCheckboxLayer","isSidebarVisible","setIsSidebarVisible","CustomSelect","CheckBox","hoverInfo","amenityIco","closeButton","alt","layoutStyleGeneral","paintHeatmap","layer_id","heatmapColor","DataLayer","layerFlag","heatmap","sourcesDataFlag","sourcesData","countryData","_Fragment","educationData","education_layer","healthcareData","healthcare_layer","transportData","transport_layer","tileSize","population_layer","LAYERS_ACTION","mapRef","deckRef","deckLayers","setDeckLayers","setViewState","setSourcesData","setSourcesDataFlag","setSelectedCountry","setHoverInfo","fetchData","new_features","StaticMap","handleLoad","addImage","boxZoom","DataLayerWrap","CustomPopUp","Sidebar","selectCountry","ReactDOM","App","reportWebVitals"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.4198a538.js b/static/js/main.51966397.js similarity index 98% rename from static/js/main.4198a538.js rename to static/js/main.51966397.js index d622feb..5966b1a 100644 --- a/static/js/main.4198a538.js +++ b/static/js/main.51966397.js @@ -1,3 +1,3 @@ -/*! For license information please see main.4198a538.js.LICENSE.txt */ -!function(){var e={895:function(e,t,n){var r;!function(i,s,o,a){"use strict";var l,c=["","webkit","Moz","MS","ms","o"],u=s.createElement("div"),h="function",d=Math.round,f=Math.abs,p=Date.now;function g(e,t,n){return setTimeout(w(e,n),t)}function m(e,t,n){return!!Array.isArray(e)&&(_(e,n[t],n),!0)}function _(e,t,n){var r;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==a)for(r=0;r\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=i.console&&(i.console.warn||i.console.log);return s&&s.call(i.console,r,n),e.apply(this,arguments)}}l="function"!==typeof Object.assign?function(e){if(e===a||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n-1}function k(e){return e.trim().split(/\s+/g)}function P(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;rn[t]})):r.sort()),r}function I(e,t){for(var n,r,i=t[0].toUpperCase()+t.slice(1),s=0;s1&&!n.firstMultiple?n.firstMultiple=re(t):1===i&&(n.firstMultiple=!1);var s=n.firstInput,o=n.firstMultiple,l=o?o.center:s.center,c=t.center=ie(r);t.timeStamp=p(),t.deltaTime=t.timeStamp-s.timeStamp,t.angle=le(l,c),t.distance=ae(l,c),function(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},s=e.prevInput||{};t.eventType!==G&&s.eventType!==V||(i=e.prevDelta={x:s.deltaX||0,y:s.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y});t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}(n,t),t.offsetDirection=oe(t.deltaX,t.deltaY);var u=se(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=u.x,t.overallVelocityY=u.y,t.overallVelocity=f(u.x)>f(u.y)?u.x:u.y,t.scale=o?(h=o.pointers,d=r,ae(d[0],d[1],ee)/ae(h[0],h[1],ee)):1,t.rotation=o?function(e,t){return le(t[1],t[0],ee)+le(e[1],e[0],ee)}(o.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,function(e,t){var n,r,i,s,o=e.lastInterval||t,l=t.timeStamp-o.timeStamp;if(t.eventType!=W&&(l>j||o.velocity===a)){var c=t.deltaX-o.deltaX,u=t.deltaY-o.deltaY,h=se(l,c,u);r=h.x,i=h.y,n=f(h.x)>f(h.y)?h.x:h.y,s=oe(c,u),e.lastInterval=t}else n=o.velocity,r=o.velocityX,i=o.velocityY,s=o.direction;t.velocity=n,t.velocityX=r,t.velocityY=i,t.direction=s}(n,t);var h,d;var g=e.element;x(t.srcEvent.target,g)&&(g=t.srcEvent.target);t.target=g}(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function re(e){for(var t=[],n=0;n=f(t)?e<0?$:X:t<0?K:Y}function ae(e,t,n){n||(n=J);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function le(e,t,n){n||(n=J);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return 180*Math.atan2(i,r)/Math.PI}te.prototype={handler:function(){},init:function(){this.evEl&&A(this.element,this.evEl,this.domHandler),this.evTarget&&A(this.target,this.evTarget,this.domHandler),this.evWin&&A(L(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&R(this.element,this.evEl,this.domHandler),this.evTarget&&R(this.target,this.evTarget,this.domHandler),this.evWin&&R(L(this.element),this.evWin,this.domHandler)}};var ce={mousedown:G,mousemove:2,mouseup:V},ue="mousedown",he="mousemove mouseup";function de(){this.evEl=ue,this.evWin=he,this.pressed=!1,te.apply(this,arguments)}E(de,te,{handler:function(e){var t=ce[e.type];t&G&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=V),this.pressed&&(t&V&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:z,srcEvent:e}))}});var fe={pointerdown:G,pointermove:2,pointerup:V,pointercancel:W,pointerout:W},pe={2:U,3:"pen",4:z,5:"kinect"},ge="pointerdown",me="pointermove pointerup pointercancel";function _e(){this.evEl=ge,this.evWin=me,te.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}i.MSPointerEvent&&!i.PointerEvent&&(ge="MSPointerDown",me="MSPointerMove MSPointerUp MSPointerCancel"),E(_e,te,{handler:function(e){var t=this.store,n=!1,r=e.type.toLowerCase().replace("ms",""),i=fe[r],s=pe[e.pointerType]||e.pointerType,o=s==U,a=P(t,e.pointerId,"pointerId");i&G&&(0===e.button||o)?a<0&&(t.push(e),a=t.length-1):i&(V|W)&&(n=!0),a<0||(t[a]=e,this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:s,srcEvent:e}),n&&t.splice(a,1))}});var ye={touchstart:G,touchmove:2,touchend:V,touchcancel:W};function ve(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,te.apply(this,arguments)}function be(e,t){var n=M(e.touches),r=M(e.changedTouches);return t&(V|W)&&(n=O(n.concat(r),"identifier",!0)),[n,r]}E(ve,te,{handler:function(e){var t=ye[e.type];if(t===G&&(this.started=!0),this.started){var n=be.call(this,e,t);t&(V|W)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:U,srcEvent:e})}}});var Ee={touchstart:G,touchmove:2,touchend:V,touchcancel:W},we="touchstart touchmove touchend touchcancel";function Te(){this.evTarget=we,this.targetIds={},te.apply(this,arguments)}function Se(e,t){var n=M(e.touches),r=this.targetIds;if(t&(2|G)&&1===n.length)return r[n[0].identifier]=!0,[n,n];var i,s,o=M(e.changedTouches),a=[],l=this.target;if(s=n.filter((function(e){return x(e.target,l)})),t===G)for(i=0;i-1&&r.splice(e,1)}),Ae)}}function ke(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<8&&r(t.options.event+Ve(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=8&&r(t.options.event+Ve(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=je},canEmit:function(){for(var e=0;et.threshold&&i&t.direction},attrTest:function(e){return $e.prototype.attrTest.call(this,e)&&(2&this.state||!(2&this.state)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=We(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),E(Ke,$e,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Le]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),E(Ye,Ge,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[Ie]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distancet.time;if(this._input=e,!r||!n||e.eventType&(V|W)&&!i)this.reset();else if(e.eventType&G)this.reset(),this._timer=g((function(){this.state=8,this.tryEmit()}),t.time,this);else if(e.eventType&V)return 8;return je},reset:function(){clearTimeout(this._timer)},emit:function(e){8===this.state&&(e&&e.eventType&V?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=p(),this.manager.emit(this.options.event,this._input)))}}),E(qe,$e,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Le]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)}}),E(Ze,$e,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:q|Z,pointers:1},getTouchAction:function(){return Xe.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return n&(q|Z)?t=e.overallVelocity:n&q?t=e.overallVelocityX:n&Z&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&f(t)>this.options.velocity&&e.eventType&V},emit:function(e){var t=We(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),E(Qe,Ge,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Ne]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distance